]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: unblock signals when we try to core dump
authorShenghou Ma <minux.ma@gmail.com>
Fri, 20 Dec 2013 01:45:05 +0000 (20:45 -0500)
committerShenghou Ma <minux.ma@gmail.com>
Fri, 20 Dec 2013 01:45:05 +0000 (20:45 -0500)
Fixes #6988.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/44070046

13 files changed:
src/pkg/runtime/os_darwin.c
src/pkg/runtime/os_darwin.h
src/pkg/runtime/os_dragonfly.c
src/pkg/runtime/os_dragonfly.h
src/pkg/runtime/os_freebsd.c
src/pkg/runtime/os_freebsd.h
src/pkg/runtime/os_linux.c
src/pkg/runtime/os_linux.h
src/pkg/runtime/os_netbsd.c
src/pkg/runtime/os_netbsd.h
src/pkg/runtime/os_openbsd.c
src/pkg/runtime/os_openbsd.h
src/pkg/runtime/signal_unix.c

index 9eb1b4626f2602ed3bfce0859b199bece6bdd8ec..5a38a77a3298a858be52eacc1d66baa53e9e411f 100644 (file)
@@ -517,3 +517,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil);
+}
index b4f49e023516325bd88898847753c7d44909f6be..91a405f2145586f2c9cac92c17d5bfc431689346 100644 (file)
@@ -23,6 +23,7 @@ int32 runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
 
 typedef uint32 Sigset;
 void   runtime·sigprocmask(int32, Sigset*, Sigset*);
+void   runtime·unblocksignals(void);
 
 struct Sigaction;
 void   runtime·sigaction(uintptr, struct Sigaction*, struct Sigaction*);
@@ -39,4 +40,3 @@ void  runtime·setitimer(int32, Itimerval*, Itimerval*);
 #define        SIG_BLOCK 1
 #define        SIG_UNBLOCK 2
 #define        SIG_SETMASK 3
-
index cf427b78c0b5fce4af99d9c38993a0368252747d..ade3adb26def5c2a7d3ee09889cb07740af57b14 100644 (file)
@@ -280,3 +280,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·sigprocmask(&sigset_none, nil);
+}
index ebbd0eb15d6009f370828825cddbdf94afedf5b7..fddeede85d7c661164ee3baea8b25e0a9435d0ec 100644 (file)
@@ -12,6 +12,7 @@ void  runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 struct sigaction;
 void   runtime·sigaction(int32, struct sigaction*, struct sigaction*);
 void   runtime·sigprocmask(Sigset *, Sigset *);
+void   runtime·unblocksignals(void);
 void   runtime·setitimer(int32, Itimerval*, Itimerval*);
 int32  runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
 
index 042097bdd9b2c074cef9cdddcb85b4be206d6097..442c6d76703b382010493f6d891bf32d3c50599e 100644 (file)
@@ -288,3 +288,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·sigprocmask(&sigset_none, nil);
+}
index c1853e65d696b9edf8328023943a36dc414334b7..4b2c253308f98c0e89f1f4482882195921ec4cd1 100644 (file)
@@ -12,6 +12,7 @@ void  runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 struct sigaction;
 void   runtime·sigaction(int32, struct sigaction*, struct sigaction*);
 void   runtime·sigprocmask(Sigset *, Sigset *);
+void   runtime·unblocksignals(void);
 void   runtime·setitimer(int32, Itimerval*, Itimerval*);
 int32  runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
 
index cb45fe8cee9dfc4a82c533d3dda03024f580369f..130e1059ec8df53b7749594e661eb21b49f2b336 100644 (file)
@@ -331,3 +331,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·rtsigprocmask(SIG_SETMASK, &sigset_none, nil, sizeof sigset_none);
+}
index b2d3f6f2aac99ff4a08fb338020fb0d243d2f931..d4b1902c3ad4b1e22baa9bb9bf312c7ebd81ddab 100644 (file)
@@ -28,6 +28,7 @@ struct Sigset
        uint32 mask[2];
 };
 void   runtime·rtsigprocmask(int32, Sigset*, Sigset*, int32);
+void   runtime·unblocksignals(void);
 #define SIG_SETMASK 2
 
 #define RLIMIT_AS 9
index a49dca295d65d8b2cc1c7a52413121a771d3fb95..745818183f7ef43eaba873ae3156e6886f0860f4 100644 (file)
@@ -326,3 +326,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil);
+}
index 55743c8d54c0f2828615ee9028cfa05c4711a444..16e9833af5df91095bea12787e8d5344f72a3b8b 100644 (file)
@@ -18,6 +18,7 @@ void  runtime·setitimer(int32, Itimerval*, Itimerval*);
 void   runtime·sigaction(int32, struct sigaction*, struct sigaction*);
 void   runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 void   runtime·sigprocmask(int32, Sigset*, Sigset*);
+void   runtime·unblocksignals(void);
 int32  runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
 extern void runtime·lwp_tramp(void);
 
index 18377a04729fbcbc88f06e7befcc750fa5e16a9c..6de4b8a71837a706b2c18d9d86177794d0a80a5b 100644 (file)
@@ -300,3 +300,9 @@ runtime·signalstack(byte *p, int32 n)
                st.ss_flags = SS_DISABLE;
        runtime·sigaltstack(&st, nil);
 }
+
+void
+runtime·unblocksignals(void)
+{
+       runtime·sigprocmask(SIG_SETMASK, &sigset_none);
+}
index 4746b314f2449a4c2bbb04b4429d0e9ce9a3c68f..bbfde39e26efcea318c5cacbe05499acccf18ead 100644 (file)
@@ -18,6 +18,7 @@ void  runtime·setitimer(int32, Itimerval*, Itimerval*);
 void   runtime·sigaction(int32, struct sigaction*, struct sigaction*);
 void   runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
 Sigset runtime·sigprocmask(int32, Sigset);
+void   runtime·unblocksignals(void);
 int32  runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
 
 #define        NSIG 33
index 4d14b22086b9de3c0298b1733ae689ecb5727302..edbf1d2751511538cdd09b965695b413457add66 100644 (file)
@@ -113,6 +113,7 @@ runtime·crash(void)
                return;
 #endif
 
+       runtime·unblocksignals();
        runtime·setsig(SIGABRT, SIG_DFL, false);
        runtime·raise(SIGABRT);
 }