X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-stub-ws.c;h=036b4943aee03319cebd4fc2197e1dca2248b61f;hb=6e7f3d28a2d08a8976fdd9c586b4cbddcaeb37bd;hp=740a8575f1a402acea50d6e771b9e6ecdf0d21cd;hpb=bb5d6e408b08d82b89e0b1e91e05a0e4c0226c18;p=src%2Fapp-framework-binder.git diff --git a/src/afb-stub-ws.c b/src/afb-stub-ws.c index 740a8575..036b4943 100644 --- a/src/afb-stub-ws.c +++ b/src/afb-stub-ws.c @@ -481,13 +481,13 @@ static void record_session(struct afb_stub_ws *stubws, struct afb_session *sessi while ((s = *prv)) { if (s->session == session) return; - if (afb_session_is_active(s->session)) - prv = &s->next; - else { + if (afb_session_is_closed(s->session)) { *prv = s->next; - afb_session_addref(s->session); + afb_session_unref(s->session); free(s); } + else + prv = &s->next; } /* create */ @@ -651,10 +651,12 @@ static void on_hangup(void *closure) { struct afb_stub_ws *stubws = closure; + afb_stub_ws_addref(stubws); if (stubws->on_hangup) stubws->on_hangup(stubws); release_sessions(stubws); + afb_stub_ws_unref(stubws); } /*****************************************************/ @@ -707,7 +709,8 @@ void afb_stub_ws_unref(struct afb_stub_ws *stubws) { if (!__atomic_sub_fetch(&stubws->refcount, 1, __ATOMIC_RELAXED)) { drop_all_events(stubws); - afb_evt_listener_unref(stubws->listener); + if (stubws->listener) + afb_evt_listener_unref(stubws->listener); release_sessions(stubws); afb_proto_ws_unref(stubws->proto); afb_cred_unref(stubws->cred);