X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-trace.c;h=2b8030290b814bb897d54c142c3f1d8cf4d7c78d;hb=f8ca7444353ca2ea3384d53482219e26f624b7d8;hp=f0efd5f365b3afdb06744433785ca0ed2b56bc90;hpb=31075cdfdc15bb7474e96051d7f19135227f3e15;p=src%2Fapp-framework-binder.git diff --git a/src/afb-trace.c b/src/afb-trace.c index f0efd5f3..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; @@ -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;