From e666ed64446ecb286052bbded6821f87b3f5e72a Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Fri, 12 Jul 2002 01:23:03 +0000 Subject: [PATCH] Check for signals to be delivered after every syscall. This avoids some obscure deadlock cases. (Neil Conway). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@487 --- coregrind/vg_scheduler.c | 13 ++++++++++--- vg_scheduler.c | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/coregrind/vg_scheduler.c b/coregrind/vg_scheduler.c index 8881f9ae6..74af76129 100644 --- a/coregrind/vg_scheduler.c +++ b/coregrind/vg_scheduler.c @@ -1368,10 +1368,17 @@ VgSchedReturnCode VG_(scheduler) ( void ) } # endif - if (VG_(threads)[tid].status == VgTs_Runnable) + if (VG_(threads)[tid].status == VgTs_Runnable) { + /* Better do a signal check, since if in a tight loop + with a slow syscall it may be a very long time + before we get back to the main signal check in Stage 1. */ + sigs_delivered = VG_(deliver_signals)(); + if (sigs_delivered) + VG_(do_sanity_checks)( False ); continue; /* with this thread */ - else - goto stage1; + } else { + goto stage1; + } } /* It's an event we can't quickly deal with. Give up running diff --git a/vg_scheduler.c b/vg_scheduler.c index 8881f9ae6..74af76129 100644 --- a/vg_scheduler.c +++ b/vg_scheduler.c @@ -1368,10 +1368,17 @@ VgSchedReturnCode VG_(scheduler) ( void ) } # endif - if (VG_(threads)[tid].status == VgTs_Runnable) + if (VG_(threads)[tid].status == VgTs_Runnable) { + /* Better do a signal check, since if in a tight loop + with a slow syscall it may be a very long time + before we get back to the main signal check in Stage 1. */ + sigs_delivered = VG_(deliver_signals)(); + if (sigs_delivered) + VG_(do_sanity_checks)( False ); continue; /* with this thread */ - else - goto stage1; + } else { + goto stage1; + } } /* It's an event we can't quickly deal with. Give up running