summaryrefslogtreecommitdiffstats
path: root/translate.cxx
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-11-26 13:59:53 -0500
committerFrank Ch. Eigler <fche@elastic.org>2008-11-26 13:59:53 -0500
commit8d59b39f96b89eb055d77d422a923c499d2a5fca (patch)
treec40a45b0356c97f66c4c7b2dcd262b5777c4c1be /translate.cxx
parent391d64d0997a41035f2af5f13d41dae00300061b (diff)
downloadsystemtap-steved-8d59b39f96b89eb055d77d422a923c499d2a5fca.tar.gz
systemtap-steved-8d59b39f96b89eb055d77d422a923c499d2a5fca.tar.xz
systemtap-steved-8d59b39f96b89eb055d77d422a923c499d2a5fca.zip
safety: add paranoid call to synchronize_sched() during shutdown process
Diffstat (limited to 'translate.cxx')
-rw-r--r--translate.cxx6
1 files changed, 6 insertions, 0 deletions
diff --git a/translate.cxx b/translate.cxx
index 1cf7361e..41a424ed 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -1287,6 +1287,11 @@ c_unparser::emit_module_exit ()
o->newline () << "yield ();"; // aka schedule() and then some
o->newline(-2) << "} while (holdon);";
+ //
+ o->newline() << "#ifdef STAPCONF_SYNCHRONIZE_SCHED";
+ o->newline() << "synchronize_sched();";
+ o->newline() << "#endif";
+
// XXX: might like to have an escape hatch, in case some probe is
// genuinely stuck somehow
@@ -4860,6 +4865,7 @@ translate_pass (systemtap_session& s)
s.op->newline() << "#include \"stat.c\"";
s.op->newline() << "#include <linux/string.h>";
s.op->newline() << "#include <linux/timer.h>";
+ s.op->newline() << "#include <linux/sched.h>";
s.op->newline() << "#include <linux/delay.h>";
s.op->newline() << "#include <linux/profile.h>";
s.op->newline() << "#include <linux/random.h>";