From 49abf162fa91397b0c65d41f5c9af31ace4e6290 Mon Sep 17 00:00:00 2001 From: fche Date: Thu, 28 Feb 2008 21:34:46 +0000 Subject: PR5045: clean up after interrupts 2008-02-28 Frank Ch. Eigler PR5045 * session.h (pending_interrupts): New global. * main.cxx (handle_interrupts): New fn to handle SIGINT* etc. * elaborate.cxx, translate.cxx, tapsets.cxx, main.cxx (*): Insert pending_interrupts escape hatches inside potentially timetaking loops. * buildrun.cxx: Don't deal with signals. --- translate.cxx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'translate.cxx') diff --git a/translate.cxx b/translate.cxx index fefb0c8f..855a8e93 100644 --- a/translate.cxx +++ b/translate.cxx @@ -4471,18 +4471,21 @@ translate_pass (systemtap_session& s) s.op->newline(1); for (unsigned i=0; iemit_global_init (s.globals[i]); } s.op->newline(-1) << "};"; for (unsigned i=0; inewline(); s.up->emit_functionsig (s.functions[i]); } for (unsigned i=0; inewline(); s.up->emit_function (s.functions[i]); } @@ -4492,12 +4495,16 @@ translate_pass (systemtap_session& s) // emit_locks()/emit_unlocks(). for (unsigned i=0; ineeds_global_locks()) + if (pending_interrupts) return 1; + if (s.probes[i]->needs_global_locks()) s.probes[i]->body->visit (&cup.vcv_needs_global_locks); } for (unsigned i=0; iemit_probe (s.probes[i]); + { + if (pending_interrupts) return 1; + s.up->emit_probe (s.probes[i]); + } s.op->newline(); s.up->emit_module_init (); -- cgit