X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Ftests%2Ftest-thread.c;h=30e27a2e455aef6da86a115c51c3e48e45c7c433;hb=391ada39d89f9f90d186aed8e1d825be9c17a328;hp=cc676bd0cdaa1a5edcc401b0b275927cded8c47b;hpb=98a5bca16007a7c4740c4326ef83768d034aed3e;p=src%2Fapp-framework-binder.git diff --git a/src/tests/test-thread.c b/src/tests/test-thread.c index cc676bd0..30e27a2e 100644 --- a/src/tests/test-thread.c +++ b/src/tests/test-thread.c @@ -7,6 +7,7 @@ #include #include "../afb-thread.h" +#include "../jobs.h" struct foo { int value; @@ -23,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); } } @@ -31,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 = { @@ -69,6 +70,17 @@ void process(struct afb_req req) // nanosleep(&ts, NULL); } +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); +} + int main() { int i; @@ -77,21 +89,24 @@ int main() struct timespec ts; req.itf = &itf; - afb_thread_init(4, 1); + 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_call(req, process, 5, (&ts) + (i % 4)); + afb_thread_req_call(req, process, 5, (&ts) + (i % 7)); unref(foo); + if (i == 5000) +#if 0 + jobs_invoke0(0, terminate); +#else + jobs_queue0(NULL, 0, terminate); +#endif ts.tv_sec = 0; ts.tv_nsec = 1000000; // nanosleep(&ts, NULL); } - ts.tv_sec = 1; - ts.tv_nsec = 0; - nanosleep(&ts, NULL); - afb_thread_terminate(); + return -jobs_add_me(); }