summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2009-03-06 19:30:39 -0800
committerJosh Stone <jistone@redhat.com>2009-03-06 19:30:39 -0800
commitddc5ee5a548c8c945b63d9e3076efb12272d2617 (patch)
tree8e000829e0d4eade878aa13c2362272e332d2179
parentd99d881952436f5b01364b8f31b1bc90c22a1444 (diff)
downloadsystemtap-steved-ddc5ee5a548c8c945b63d9e3076efb12272d2617.tar.gz
systemtap-steved-ddc5ee5a548c8c945b63d9e3076efb12272d2617.tar.xz
systemtap-steved-ddc5ee5a548c8c945b63d9e3076efb12272d2617.zip
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.
-rw-r--r--tapsets.cxx4
1 files changed, 4 insertions, 0 deletions
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();";
}