Bug #513
closedUndefined behaviour - tracepoints with same provider in multiple compilation units
100%
Description
When using tracepoints with the same provider in multiple .c files, my small test application crashes at startup with a cryptic error message:
test: /usr/local/include/lttng/ust-tracepoint-event.h:685: __lttng_events_init__my_project: Assertion `!ret' failed. Aborted
Gitweb: http://git.dorsal.polymtl.ca/~smarchi?p=ust-test.git;a=summary
To run: make && ./test
With a more complex application, I get a different behaviour, no crash, but only one tracepoint gets correctly activated. I attached a tarball with an example.
To run:
$ ./configure --enable-tracing
$ make
$ LTTNG_UST_DEBUG=1 ./memcached
Snippet from the debug output:
liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_add (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_del (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_pre (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_set (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_app (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_get (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:cmd_rep (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:new_conn (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:conn_dispatch (in tracepoint_register_lib() at tracepoint.c:762) liblttng_ust_tracepoint[15544/15544]: registered tracepoint: memcached:server_start (in tracepoint_register_lib() at tracepoint.c:762) libust[15544/15544]: adding probe memcached containing 1 events to lazy registration list (in lttng_probe_register() at lttng-probes.c:179) libust[15544/15544]: just registered probe memcached containing 1 events (in lttng_lazy_probe_register() at lttng-probes.c:115) libust[15544/15544]: Sent register event notification for name "memcached:server_start": ret_code 0, event_id 0 (in ustcomm_register_event() at lttng-ust-comm.c:948) liblttng_ust_tracepoint[15544/15544]: Registering probe to tracepoint memcached:server_start (in __tracepoint_probe_register() at tracepoint.c:539)
We can see "adding probe memcached containing 1 events", where I would prefer "adding probe memcached containing 10 events".
Files
Updated by Mathieu Desnoyers over 11 years ago
- Status changed from New to Feedback
In your small test app, I see:
tp1.h:
#define TRACEPOINT_PROVIDER my_project
tp2.h:
#define TRACEPOINT_PROVIDER my_project
what makes you think it is supported to define twice the same provider in a program ?
It looks like there might be some extra documentation to add to lttng-ust(3) to discourage trying this, because it is unsupported.
Updated by Simon Marchi over 11 years ago
I think the confusion is because I don't understand the concept of a "provider". I thought it was one app <=> one provider, but that is not the case.
As you said, some more documentation would help. There is nothing in the man page that suggests that you can't use the same provider name for tracepoints in different .tp files.
Updated by Mathieu Desnoyers over 11 years ago
- Status changed from Feedback to Resolved
- % Done changed from 0 to 100
Applied in changeset 7d381d6e31531cf4f7bc5f4df955dd819731ba44.