From: Julian Seward Date: Fri, 12 Jul 2002 01:23:03 +0000 (+0000) Subject: Check for signals to be delivered after every syscall. This avoids X-Git-Tag: svn/VALGRIND_1_0_3~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e666ed64446ecb286052bbded6821f87b3f5e72a;p=thirdparty%2Fvalgrind.git 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 --- diff --git a/coregrind/vg_scheduler.c b/coregrind/vg_scheduler.c index 8881f9ae64..74af761290 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 8881f9ae64..74af761290 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