X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-trace.c;h=2b8030290b814bb897d54c142c3f1d8cf4d7c78d;hb=350f165da982685f2ea7c6d0899e9711b2c35982;hp=eb1122d4945397b8571f2cec801c6c997f9282ac;hpb=541756a5f6af26338add0b1ac7a1c0c3bb518b80;p=src%2Fapp-framework-binder.git diff --git a/src/afb-trace.c b/src/afb-trace.c index eb1122d4..2b803029 100644 --- a/src/afb-trace.c +++ b/src/afb-trace.c @@ -27,6 +27,7 @@ #include #include + #define AFB_BINDING_VERSION 0 #include @@ -106,7 +107,7 @@ struct afb_trace { int refcount; /* reference count */ pthread_mutex_t mutex; /* concurrency management */ - struct afb_daemon *daemon; /* daemon */ + const char *apiname; /* api name for events */ struct afb_session *bound; /* bound to session */ struct event *events; /* list of events */ struct tag *tags; /* list of tags */ @@ -1065,7 +1066,6 @@ static struct tag *trace_get_tag(struct afb_trace *trace, const char *name, int */ static struct event *trace_get_event(struct afb_trace *trace, const char *name, int alloc) { - struct afb_event e; struct event *event; /* search the event */ @@ -1076,8 +1076,7 @@ static struct event *trace_get_event(struct afb_trace *trace, const char *name, if (!event && alloc) { event = malloc(sizeof * event); if (event) { - e = afb_daemon_make_event_v1(*trace->daemon, name); - event->evtid = afb_evt_eventid_to_evtid(afb_event_to_eventid(e)); + event->evtid = afb_evt_evtid_create2(trace->apiname, name); if (event->evtid) { event->next = trace->events; trace->events = event; @@ -1126,7 +1125,7 @@ static struct afb_session *trace_get_session_by_uuid(struct afb_trace *trace, co if (!alloc) cookie.session = afb_session_search(uuid); else { - cookie.session = afb_session_get(uuid, NULL); + 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); @@ -1211,17 +1210,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); @@ -1423,8 +1424,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); + } } } @@ -1433,17 +1436,17 @@ static void drop_session(void *closure, struct json_object *object) /*******************************************************************************/ /* allocates an afb_trace instance */ -struct afb_trace *afb_trace_create(struct afb_daemon *daemon, struct afb_session *bound) +struct afb_trace *afb_trace_create(const char *apiname, struct afb_session *bound) { struct afb_trace *trace; - assert(daemon); + assert(apiname); trace = calloc(1, sizeof *trace); if (trace) { trace->refcount = 1; trace->bound = bound; - trace->daemon = daemon; + trace->apiname = apiname; pthread_mutex_init(&trace->mutex, NULL); } return trace;