X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Ftests%2Ftest-thread.c;h=d3ce08c17f57f4147d776290e22b0e9868d0dcc0;hb=5d248158cc380d0a164fa56b46a7bdede4115407;hp=2f0e1853d482986bcfc26e7e57622c1ccfc7cb98;hpb=48827b7b9862ab5961f938f38a8667e15421a50c;p=src%2Fapp-framework-binder.git diff --git a/src/tests/test-thread.c b/src/tests/test-thread.c index 2f0e1853..d3ce08c1 100644 --- a/src/tests/test-thread.c +++ b/src/tests/test-thread.c @@ -24,7 +24,7 @@ void unref(void *closure) { struct foo *foo = closure; if(!--foo->refcount) { - printf("%06d FREE\n", foo->value); + /* printf("%06d FREE\n", foo->value); */ free(foo); } } @@ -32,7 +32,7 @@ void unref(void *closure) void fail(void *closure, const char *status, const char *info) { struct foo *foo = closure; - printf("%06d ERROR %s\n", foo->value, status); + printf("%06d ABORT T%d %s\n", foo->value, (int)syscall(SYS_gettid), status); } struct afb_req_itf itf = { @@ -70,7 +70,18 @@ void process(struct afb_req req) // nanosleep(&ts, NULL); } -int main() +void terminate(int signum) +{ + printf("---------------- TERMINATE T%d (%d)\n", (int)syscall(SYS_gettid), signum); +#if 1 + jobs_terminate(); +#else + jobs_invoke0(0, jobs_terminate); +#endif + exit(0); +} + +void start() { int i; struct foo *foo; @@ -78,23 +89,33 @@ int main() struct timespec ts; req.itf = &itf; - jobs_init(4, 0, 20000); for (i = 0 ; i < 10000 ; i++) { req.closure = foo = malloc(sizeof *foo); foo->value = i; foo->refcount = 1; afb_thread_req_call(req, process, 5, (&ts) + (i % 7)); unref(foo); + if (i == 5000) + jobs_queue0(NULL, 0, terminate); ts.tv_sec = 0; ts.tv_nsec = 1000000; // nanosleep(&ts, NULL); } - ts.tv_sec = 1; - ts.tv_nsec = 0; - nanosleep(&ts, NULL); - jobs_terminate(); } +int main() +{ + int i; + struct foo *foo; + struct afb_req req; + struct timespec ts; + + req.itf = &itf; + jobs_start(4, 0, 20000, start); + return 1; +} + +