mirror of
https://github.com/golang/go
synced 2024-09-28 23:24:33 -06:00
runtime: tricky replacements of _g_ in os3_solaris.go
The argument to semacreate is always getg().m. Change-Id: I4c4104cd6b57ab6b9ed0b7d11b8089bcc9fdd621 Reviewed-on: https://go-review.googlesource.com/c/go/+/418583 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
54a0ab3f7b
commit
b486518964
@ -308,18 +308,17 @@ func semacreate(mp *m) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var sem *semt
|
var sem *semt
|
||||||
_g_ := getg()
|
|
||||||
|
|
||||||
// Call libc's malloc rather than malloc. This will
|
// Call libc's malloc rather than malloc. This will
|
||||||
// allocate space on the C heap. We can't call malloc
|
// allocate space on the C heap. We can't call malloc
|
||||||
// here because it could cause a deadlock.
|
// here because it could cause a deadlock.
|
||||||
_g_.m.libcall.fn = uintptr(unsafe.Pointer(&libc_malloc))
|
mp.libcall.fn = uintptr(unsafe.Pointer(&libc_malloc))
|
||||||
_g_.m.libcall.n = 1
|
mp.libcall.n = 1
|
||||||
_g_.m.scratch = mscratch{}
|
mp.scratch = mscratch{}
|
||||||
_g_.m.scratch.v[0] = unsafe.Sizeof(*sem)
|
mp.scratch.v[0] = unsafe.Sizeof(*sem)
|
||||||
_g_.m.libcall.args = uintptr(unsafe.Pointer(&_g_.m.scratch))
|
mp.libcall.args = uintptr(unsafe.Pointer(&mp.scratch))
|
||||||
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&_g_.m.libcall))
|
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&mp.libcall))
|
||||||
sem = (*semt)(unsafe.Pointer(_g_.m.libcall.r1))
|
sem = (*semt)(unsafe.Pointer(mp.libcall.r1))
|
||||||
if sem_init(sem, 0, 0) != 0 {
|
if sem_init(sem, 0, 0) != 0 {
|
||||||
throw("sem_init")
|
throw("sem_init")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user