X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-stub-ws.c;h=ae83e534bd63f8a66b469fc38ca7f74352c9d812;hb=e36f8d572ca660f5c06fe45297d13c7a6818cc65;hp=68bc8c7cdefe7ab846781e720c2eb688a1de7e5b;hpb=4521c1e7ae5371ab9d639adc617d17fb4e8ded0c;p=src%2Fapp-framework-binder.git diff --git a/src/afb-stub-ws.c b/src/afb-stub-ws.c index 68bc8c7c..ae83e534 100644 --- a/src/afb-stub-ws.c +++ b/src/afb-stub-ws.c @@ -17,8 +17,6 @@ #define _GNU_SOURCE -#define NO_PLUGIN_VERBOSE_MACRO - #include #include #include @@ -52,16 +50,6 @@ struct afb_stub_ws; -/* - * structure for recording calls on client side - */ -struct client_call { - struct client_call *next; /* the next call */ - struct afb_stub_ws *stubws; /* the stub_ws */ - struct afb_xreq *xreq; /* the request handle */ - uint32_t msgid; /* the message identifier */ -}; - /* * structure for a ws request */ @@ -442,8 +430,7 @@ static void release_all_sessions(struct afb_stub_ws *stubws) { struct server_session *s, *n; - s = stubws->sessions; - stubws->sessions = NULL; + s = __atomic_exchange_n(&stubws->sessions, NULL, __ATOMIC_RELAXED); while(s) { n = s->next; afb_session_unref(s->session); @@ -599,6 +586,11 @@ static void on_hangup(void *closure) afb_stub_ws_unref(stubws); } +static int enqueue_processing(void (*callback)(int signum, void* arg), void *arg) +{ + return jobs_queue(NULL, 0, callback, arg); +} + /*****************************************************/ static struct afb_stub_ws *afb_stub_ws_create(struct fdev *fdev, const char *apiname, struct afb_apiset *apiset, int client) @@ -619,6 +611,7 @@ static struct afb_stub_ws *afb_stub_ws_create(struct fdev *fdev, const char *api stubws->apiset = afb_apiset_addref(apiset); stubws->refcount = 1; afb_proto_ws_on_hangup(stubws->proto, on_hangup); + afb_proto_ws_set_queuing(stubws->proto, enqueue_processing); return stubws; } free(stubws); @@ -666,7 +659,7 @@ void afb_stub_ws_addref(struct afb_stub_ws *stubws) __atomic_add_fetch(&stubws->refcount, 1, __ATOMIC_RELAXED); } -void afb_stub_ws_on_hangup(struct afb_stub_ws *stubws, void (*on_hangup)(struct afb_stub_ws*)) +void afb_stub_ws_set_on_hangup(struct afb_stub_ws *stubws, void (*on_hangup)(struct afb_stub_ws*)) { stubws->on_hangup = on_hangup; }