diff options
author | Josh Stone <jistone@redhat.com> | 2009-03-06 19:30:39 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-03-06 19:30:39 -0800 |
commit | ddc5ee5a548c8c945b63d9e3076efb12272d2617 (patch) | |
tree | 8e000829e0d4eade878aa13c2362272e332d2179 | |
parent | d99d881952436f5b01364b8f31b1bc90c22a1444 (diff) | |
download | systemtap-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.cxx | 4 |
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();"; } |