Works as expected. Thanks, Paul
On 12/16/2013 02:39 PM, Mathieu Desnoyers wrote: > Hi Paul, > > I rewrote the patch to use a reference counting approach instead. > The effect should be the same. Here is the commit: > > commit f0cc794d37abf59b4b8079612c7aa03dc305d92f > Author: Mathieu Desnoyers <[email protected]> > Date: Mon Dec 16 08:36:06 2013 -0500 > > Fix: baddr_statedump tracepoint registration > > Make sure that the ust_baddr_statedump probe is registered prior to > using the tracepoint in lttng_ust_baddr_statedump(). This fix solves the > issue that in rare cases the very first ust_baddr_statedump events were > missing. > > Use a reference counting approach that allows constructors/destructors > of the probe to be called many times, as long as the number of calls to > constructor matches the number of calls to destructor. > > Reported-by: Paul Woegerer <[email protected]> > Signed-off-by: Mathieu Desnoyers <[email protected]> > > Thanks, > > Mathieu > > > ----- Original Message ----- >> From: "Paul Woegerer" <[email protected]> >> To: "mathieu desnoyers" <[email protected]>, >> [email protected] >> Sent: Friday, December 13, 2013 8:12:02 AM >> Subject: [PATCH] Fix: baddr_statedump tracepoint registration >> >> Also make sure that the ust_baddr_statedump probe get registered prior >> to using the tracepoint in lttng_ust_baddr_statedump(). This fix solves >> the issue that in rare cases the very first ust_baddr_statedump events >> were missing. >> >> Signed-off-by: Paul Woegerer <[email protected]> >> --- >> include/lttng/ust-tracepoint-event.h | 10 ++++++++++ >> liblttng-ust/Makefile.am | 1 - >> liblttng-ust/lttng-ust-baddr.c | 15 +++++++++++++++ >> liblttng-ust/ust_baddr_statedump.c | 22 ---------------------- >> 4 files changed, 25 insertions(+), 23 deletions(-) >> delete mode 100644 liblttng-ust/ust_baddr_statedump.c >> >> diff --git a/include/lttng/ust-tracepoint-event.h >> b/include/lttng/ust-tracepoint-event.h >> index be58030..b48cd74 100644 >> --- a/include/lttng/ust-tracepoint-event.h >> +++ b/include/lttng/ust-tracepoint-event.h >> @@ -694,6 +694,10 @@ static struct lttng_probe_desc >> _TP_COMBINE_TOKENS(__probe_desc___, TRACEPOINT_PR >> * linking the probe statically. >> */ >> >> +#ifndef BADDR_EXPLICIT_PROBE_REGISTER >> +#define BADDR_EXPLICIT_PROBE_REGISTER do {} while (0) >> +#endif >> + >> /* Reset all macros within TRACEPOINT_EVENT */ >> #include <lttng/ust-tracepoint-event-reset.h> >> static void lttng_ust_notrace __attribute__((constructor)) >> @@ -703,6 +707,8 @@ _TP_COMBINE_TOKENS(__lttng_events_init__, >> TRACEPOINT_PROVIDER)(void) >> { >> int ret; >> >> + BADDR_EXPLICIT_PROBE_REGISTER; >> + >> /* >> * __tracepoint_provider_check_ ## TRACEPOINT_PROVIDER() is a >> * static inline function that ensures every probe PROVIDER >> @@ -724,7 +730,11 @@ _TP_COMBINE_TOKENS(__lttng_events_exit__, >> TRACEPOINT_PROVIDER)(void); >> static void >> _TP_COMBINE_TOKENS(__lttng_events_exit__, TRACEPOINT_PROVIDER)(void) >> { >> + BADDR_EXPLICIT_PROBE_REGISTER; >> + >> lttng_probe_unregister(&_TP_COMBINE_TOKENS(__probe_desc___, >> TRACEPOINT_PROVIDER)); >> } >> >> +#undef BADDR_EXPLICIT_PROBE_REGISTER >> + >> int _TP_COMBINE_TOKENS(__tracepoint_provider_, TRACEPOINT_PROVIDER); >> diff --git a/liblttng-ust/Makefile.am b/liblttng-ust/Makefile.am >> index b165c32..e9022d8 100644 >> --- a/liblttng-ust/Makefile.am >> +++ b/liblttng-ust/Makefile.am >> @@ -37,7 +37,6 @@ liblttng_ust_runtime_la_SOURCES = \ >> lttng-hash-helper.h \ >> lttng-ust-baddr.c \ >> lttng-ust-baddr.h \ >> - ust_baddr_statedump.c \ >> ust_baddr_statedump.h \ >> tracepoint-internal.h \ >> clock.h \ >> diff --git a/liblttng-ust/lttng-ust-baddr.c b/liblttng-ust/lttng-ust-baddr.c >> index b7843e2..d39e9e8 100644 >> --- a/liblttng-ust/lttng-ust-baddr.c >> +++ b/liblttng-ust/lttng-ust-baddr.c >> @@ -35,6 +35,15 @@ >> #include "lttng-tracer-core.h" >> #include "lttng-ust-baddr.h" >> >> +#define TRACEPOINT_CREATE_PROBES >> +#define TP_SESSION_CHECK >> +static int explicit_probe_register; >> +#define BADDR_EXPLICIT_PROBE_REGISTER \ >> +do { \ >> + if (!explicit_probe_register) \ >> + return; \ >> +} while (0) >> + >> #define TRACEPOINT_DEFINE >> #include "ust_baddr_statedump.h" >> >> @@ -199,10 +208,16 @@ void lttng_ust_baddr_statedump_init(void) >> { >> __tracepoints__init(); >> __tracepoints__ptrs_init(); >> + explicit_probe_register = 1; >> + __lttng_events_init__ust_baddr_statedump(); >> + explicit_probe_register = 0; >> } >> >> void lttng_ust_baddr_statedump_destroy(void) >> { >> + explicit_probe_register = 1; >> + __lttng_events_exit__ust_baddr_statedump(); >> + explicit_probe_register = 0; >> __tracepoints__ptrs_destroy(); >> __tracepoints__destroy(); >> } >> diff --git a/liblttng-ust/ust_baddr_statedump.c >> b/liblttng-ust/ust_baddr_statedump.c >> deleted file mode 100644 >> index 9097008..0000000 >> --- a/liblttng-ust/ust_baddr_statedump.c >> +++ /dev/null >> @@ -1,22 +0,0 @@ >> -/* >> - * Copyright (C) 2013 Paul Woegerer <[email protected]> >> - * >> - * This library is free software; you can redistribute it and/or >> - * modify it under the terms of the GNU Lesser General Public >> - * License as published by the Free Software Foundation; either >> - * version 2.1 of the License, or (at your option) any later version. >> - * >> - * This library is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> - * Lesser General Public License for more details. >> - * >> - * You should have received a copy of the GNU Lesser General Public >> - * License along with this library; if not, write to the Free Software >> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >> USA >> - */ >> - >> -#define _LGPL_SOURCE >> -#define TRACEPOINT_CREATE_PROBES >> -#define TP_SESSION_CHECK >> -#include "ust_baddr_statedump.h" >> -- >> 1.8.5 >> >> -- Paul Woegerer, SW Development Engineer Sourcery Analyzer <http://go.mentor.com/sourceryanalyzer> Mentor Graphics, Embedded Software Division _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
