From ddc5ee5a548c8c945b63d9e3076efb12272d2617 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 6 Mar 2009 19:30:39 -0800 Subject: Ensure tracepoints are synchronized after unreg The tracepoint API provides tracepoint_synchronize_unregister() as a way to guarantee that all tracepoint handlers are inactive. This is necessary after unregistering to allow the module to safely unload. * tapsets.cxx (tracepoint_derived_probe_group::emit_module_init): Call synchronize after unregistering tracepoints. (tracepoint_derived_probe_group::emit_module_exit): Ditto. --- tapsets.cxx | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tapsets.cxx') diff --git a/tapsets.cxx b/tapsets.cxx index 5aa67e4d..defaf385 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -9764,6 +9764,9 @@ tracepoint_derived_probe_group::emit_module_init (systemtap_session &s) << "(enter_tracepoint_probe_" << i << ");"; s.op->newline(-2) << "}"; } + s.op->newline() << "if (rc)"; + s.op->newline(1) << "tracepoint_synchronize_unregister();"; + s.op->indent(-1); } @@ -9777,6 +9780,7 @@ tracepoint_derived_probe_group::emit_module_exit (systemtap_session& s) for (unsigned i = 0; i < probes.size(); ++i) s.op->newline() << "unregister_trace_" << probes[i]->tracepoint_name << "(enter_tracepoint_probe_" << i << ");"; + s.op->newline() << "tracepoint_synchronize_unregister();"; } -- cgit