]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Tweak to remove another global variable from vg_include.h
authorNicholas Nethercote <n.nethercote@gmail.com>
Mon, 2 Aug 2004 13:15:26 +0000 (13:15 +0000)
committerNicholas Nethercote <n.nethercote@gmail.com>
Mon, 2 Aug 2004 13:15:26 +0000 (13:15 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2547

coregrind/vg_include.h
coregrind/vg_main.c
coregrind/vg_signals.c

index d4f5ac025011b8f75e4efa7503ea261fe8e6b27b..1467785093ca7777516c7bfbf086556b2ebf9388 100644 (file)
@@ -1331,9 +1331,8 @@ extern UInt VG_(dispatch_ctr);
 extern ThreadId VG_(last_run_tid);
 
 /* If we're doing the default action of a fatal signal */
-extern jmp_buf VG_(fatal_signal_jmpbuf);
-extern Bool    VG_(fatal_signal_set);          /* jmp_buf is valid */
-extern Int     VG_(fatal_sigNo);               /* the fatal signal */
+extern jmp_buf* VG_(fatal_signal_jmpbuf_ptr);
+extern Int      VG_(fatal_sigNo);              /* the fatal signal */
 
 /* --- Counters, for informational purposes only. --- */
 
index d314e267ec180b2ce16b7c1e012686527e4d14cd..1cd38d59767944cb00d7037b598d30e21dbb4e56 100644 (file)
@@ -151,10 +151,11 @@ Char** VG_(client_envp);
 /* Our signal delivery stack. */
 UInt VG_(sigstack)[VG_SIGSTACK_SIZE_W];
 
-/* jmp_buf for fatal signals */
-Int    VG_(fatal_sigNo) = -1;
-Bool   VG_(fatal_signal_set) = False;
-jmp_buf VG_(fatal_signal_jmpbuf);
+/* jmp_buf for fatal signals;  VG_(fatal_signal_jmpbuf_ptr) is NULL until
+   the time is right that it can be used. */
+Int      VG_(fatal_sigNo) = -1;
+jmp_buf* VG_(fatal_signal_jmpbuf_ptr) = NULL;
+jmp_buf  fatal_signal_jmpbuf;
 
 /* Counts downwards in VG_(run_innerloop). */
 UInt VG_(dispatch_ctr);
@@ -2980,12 +2981,12 @@ int main(int argc, char **argv)
    VGP_POPCC(VgpStartup);
    VGP_PUSHCC(VgpSched);
 
-   if (__builtin_setjmp(&VG_(fatal_signal_jmpbuf)) == 0) {
-      VG_(fatal_signal_set) = True;
+   VG_(fatal_signal_jmpbuf_ptr) = &fatal_signal_jmpbuf;
+   if (__builtin_setjmp(VG_(fatal_signal_jmpbuf_ptr)) == 0) {
       src = VG_(scheduler)( &exitcode );
-   } else
+   } else {
       src = VgSrc_FatalSig;
-
+   }
    VGP_POPCC(VgpSched);
 
 
index e5ec2d144f86d1525c59f212f2edf457ecde7345..5731a10cff243a4af6f8fc37f2418feac1f52953 100644 (file)
@@ -1795,9 +1795,9 @@ static void vg_default_action(const vki_ksiginfo_t *info, ThreadId tid)
         VG_(setrlimit)(VKI_RLIMIT_CORE, &zero);
       }
 
-      if (VG_(fatal_signal_set)) {
+      if (NULL != VG_(fatal_signal_jmpbuf_ptr)) {
         VG_(fatal_sigNo) = sigNo;
-        __builtin_longjmp(VG_(fatal_signal_jmpbuf), 1);
+        __builtin_longjmp(*VG_(fatal_signal_jmpbuf_ptr), 1);
       }
    }