]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: correct implementation of raiseproc on Solaris
authorIan Lance Taylor <iant@golang.org>
Mon, 27 Jul 2015 17:41:41 +0000 (10:41 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 28 Jul 2015 05:41:27 +0000 (05:41 +0000)
I forgot that the libc raise function only sends the signal to the
current thread.  We need to actually use kill and getpid here, as we
do on other systems.

Change-Id: Iac34af822c93468bf68cab8879db3ee20891caaf
Reviewed-on: https://go-review.googlesource.com/12704
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/os3_solaris.go

index 7caa72e3beef4d2568c52a0cf8ab8a5889949749..d766b7db6da7bdafd8c6bc40582b2ea9c5d22e3f 100644 (file)
@@ -16,7 +16,9 @@ import "unsafe"
 //go:cgo_import_dynamic libc_exit exit "libc.so"
 //go:cgo_import_dynamic libc_fstat fstat "libc.so"
 //go:cgo_import_dynamic libc_getcontext getcontext "libc.so"
+//go:cgo_import_dynamic libc_getpid getpid "libc.so"
 //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
+//go:cgo_import_dynamic libc_kill kill "libc.so"
 //go:cgo_import_dynamic libc_madvise madvise "libc.so"
 //go:cgo_import_dynamic libc_malloc malloc "libc.so"
 //go:cgo_import_dynamic libc_mmap mmap "libc.so"
@@ -449,7 +451,8 @@ func raise(sig int32) /* int32 */ {
 }
 
 func raiseproc(sig int32) /* int32 */ {
-       sysvicall1(&libc_raise, uintptr(sig))
+       pid := sysvicall0(&libc_getpid)
+       sysvicall2(&libc_kill, pid, uintptr(sig))
 }
 
 //go:nosplit