X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Flttng-events.c;h=bcb817e55cf721490c4e6f4656b8f7626e9a9ebb;hb=ab04d7b1e3708b0da0771d054e97e76d3e0f7182;hp=3f9d0f9a91fdf7b50b7a647d1aea55413d8412b0;hpb=a83d68311879e618ea79a0f2a9f3e53e05855c7e;p=lttng-modules.git diff --git a/src/lttng-events.c b/src/lttng-events.c index 3f9d0f9a..bcb817e5 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -412,6 +412,7 @@ void lttng_event_notifier_group_destroy( if (event_notifier_group->error_counter) { struct lttng_counter *error_counter = event_notifier_group->error_counter; + error_counter->ops->counter_destroy(error_counter->counter); module_put(error_counter->transport->owner); lttng_kvfree(error_counter); @@ -1071,6 +1072,7 @@ struct lttng_event_notifier *_lttng_event_notifier_create( void *filter, enum lttng_kernel_instrumentation itype) { struct lttng_event_notifier *event_notifier; + struct lttng_counter *error_counter; const char *event_name; struct hlist_head *head; int ret; @@ -1234,9 +1236,12 @@ struct lttng_event_notifier *_lttng_event_notifier_create( /* * Clear the error counter bucket. The sessiond keeps track of which - * bucket is currently in use. We trust it. + * bucket is currently in use. We trust it. The session lock + * synchronizes against concurrent creation of the error + * counter. */ - if (event_notifier_group->error_counter) { + error_counter = event_notifier_group->error_counter; + if (error_counter) { size_t dimension_index[1]; /* @@ -1250,9 +1255,7 @@ struct lttng_event_notifier *_lttng_event_notifier_create( } dimension_index[0] = event_notifier->error_counter_index; - ret = event_notifier_group->error_counter->ops->counter_clear( - event_notifier_group->error_counter->counter, - dimension_index); + ret = error_counter->ops->counter_clear(error_counter->counter, dimension_index); if (ret) { printk(KERN_INFO "LTTng: event_notifier: Unable to clear error counter bucket %llu\n", event_notifier->error_counter_index);