X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-trace.c;h=021ab5af1bdbf57954228c50ae5c57b7a5933fc3;hb=refs%2Ftags%2Feel%2F5.0.0;hp=cefd20582ddc259aaea98df7ebc2ddabd8bafffa;hpb=e106c1b5e5c4a27d6907f8f1dc55443506135072;p=src%2Fapp-framework-binder.git diff --git a/src/afb-trace.c b/src/afb-trace.c index cefd2058..021ab5af 100644 --- a/src/afb-trace.c +++ b/src/afb-trace.c @@ -1122,12 +1122,15 @@ static void *session_open(void *closure) static struct afb_session *trace_get_session_by_uuid(struct afb_trace *trace, const char *uuid, int alloc) { struct cookie cookie; - int created; - cookie.session = afb_session_get(uuid, alloc ? &created : NULL); - if (cookie.session) { - cookie.trace = trace; - afb_session_cookie(cookie.session, cookie.trace, session_open, session_closed, &cookie, 0); + if (!alloc) + cookie.session = afb_session_search(uuid); + else { + cookie.session = afb_session_get(uuid, AFB_SESSION_TIMEOUT_DEFAULT, NULL); + if (cookie.session) { + cookie.trace = trace; + afb_session_cookie(cookie.session, cookie.trace, session_open, session_closed, &cookie, 0); + } } return cookie.session; } @@ -1208,17 +1211,19 @@ static void addhook(struct desc *desc, enum trace_type type) /* create the hook handler */ switch (type) { case Trace_Type_Xreq: - if (desc->session) { + if (!desc->session) + session = afb_session_addref(bind); + else { session = trace_get_session_by_uuid(trace, desc->session, 1); if (!session) { ctxt_error(&desc->context->errors, "allocation of session failed"); free(hook); return; } - bind = session; } - hook->handler = afb_hook_create_xreq(desc->api, desc->verb, bind, + hook->handler = afb_hook_create_xreq(desc->api, desc->verb, session, desc->flags[type], &hook_xreq_itf, hook); + afb_session_unref(session); break; case Trace_Type_Ditf: hook->handler = afb_hook_create_ditf(desc->api, desc->flags[type], &hook_ditf_itf, hook); @@ -1420,8 +1425,10 @@ static void drop_session(void *closure, struct json_object *object) session = trace_get_session_by_uuid(context->trace, uuid, 0); if (!session) ctxt_error(&context->errors, "session %s not found", uuid); - else + else { trace_unhook(context->trace, NULL, NULL, session); + afb_session_unref(session); + } } }