Skip to content

Commit

Permalink
compiler/natives/src/sync: update for Go 1.13 internal API changes
Browse files Browse the repository at this point in the history
runtime_SemacquireMutex and runtime_Semrelease had a new parameter
added in Go 1.13. Modify the signature of our override to match.
The parameter is not used, since it's for tracing, which is not
something GopherJS supports at this time.

Add victim and victimSize struct fields, also new in Go 1.13, to
our Pool struct override.

Fixes:

	$ gopherjs build sync
	/goroot/src/sync/waitgroup.go:93:36: too many arguments
	/goroot/src/sync/rwmutex.go:133:44: too many arguments
	/goroot/src/sync/rwmutex.go:103:49: too many arguments
	/goroot/src/sync/rwmutex.go:85:44: too many arguments
	/goroot/src/sync/rwmutex.go:50:49: too many arguments
	/goroot/src/sync/pool.go:242:5: p.victim undefined (type *Pool has no field or method victim)
	/goroot/src/sync/pool.go:243:5: p.victimSize undefined (type *Pool has no field or method victimSize)
	/goroot/src/sync/pool.go:248:5: p.victim undefined (type *Pool has no field or method victim)
	/goroot/src/sync/pool.go:249:5: p.victimSize undefined (type *Pool has no field or method victimSize)
	/goroot/src/sync/pool.go:168:31: p.victimSize undefined (type *Pool has no field or method victimSize)
	/goroot/src/sync/pool.go:168:31: too many errors
  • Loading branch information
dmitshur committed Aug 12, 2019
1 parent cec6ca7 commit c6ec0c3
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
3 changes: 3 additions & 0 deletions compiler/natives/src/sync/pool.go
Expand Up @@ -8,6 +8,9 @@ type Pool struct {
local unsafe.Pointer
localSize uintptr

victim unsafe.Pointer
victimSize uintptr

store []interface{}
New func() interface{}
}
Expand Down
9 changes: 5 additions & 4 deletions compiler/natives/src/sync/sync.go
Expand Up @@ -18,13 +18,14 @@ var semWaiters = make(map[*uint32][]chan bool)
var semAwoken = make(map[*uint32]uint32)

func runtime_Semacquire(s *uint32) {
runtime_SemacquireMutex(s, false)
runtime_SemacquireMutex(s, false, 0)
}

// SemacquireMutex is like Semacquire, but for profiling contended Mutexes.
// Mutex profiling is not supported, so just use the same implementation as runtime_Semacquire.
// TODO: Investigate this. If it's possible to implement, consider doing so, otherwise remove this comment.
func runtime_SemacquireMutex(s *uint32, lifo bool) {
func runtime_SemacquireMutex(s *uint32, lifo bool, skipframes int) {
// TODO: Use skipframes if needed/possible.
if (*s - semAwoken[s]) == 0 {
ch := make(chan bool)
if lifo {
Expand All @@ -41,8 +42,8 @@ func runtime_SemacquireMutex(s *uint32, lifo bool) {
*s--
}

func runtime_Semrelease(s *uint32, handoff bool) {
// TODO: Use handoff if needed/possible.
func runtime_Semrelease(s *uint32, handoff bool, skipframes int) {
// TODO: Use handoff, skipframes if needed/possible.
*s++

w := semWaiters[s]
Expand Down

0 comments on commit c6ec0c3

Please sign in to comment.