Repository navigation
runtime: destroy the M's semaphore when it exits on AIX - #82521
Open
thevilledev wants to merge 1 commit into
Open
thevilledev wants to merge 1 commit into
thevilledev wants to merge 1 commit into
Conversation
semacreate allocates an unnamed POSIX semaphore on the C heap and initializes it with sem_init, but mdestroy never released it. On AIX sem_init fails with ENOSPC once SEM_NSEMS_MAX semaphores exist (32768 on AIX 7.3), so a program that keeps retiring Ms (for example a goroutine that parks once and then returns while locked to its thread) fails in semacreate with "fatal error: sem_init" after about 32000 retired threads. The malloc'd storage leaked as well. Call sem_destroy and free from mdestroy, which runs after the exiting M stops taking locks. Add an AIX test that retires 40000 locked Ms that have each parked once. It is in testprogcgo because without cgo, exited threads do not exit on AIX until CL 849968 lands. Without the fix, the test fails with "fatal error: sem_init". Fixes golang#82305
Contributor
|
This PR (HEAD: 262c7da) has been imported to Gerrit for code review. Please visit Gerrit at https://go-review.googlesource.com/c/go/+/853945. Important tips:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
semacreate allocates an unnamed POSIX semaphore on the C heap and
initializes it with sem_init, but mdestroy never released it. On AIX
sem_init fails with ENOSPC once SEM_NSEMS_MAX semaphores exist (32768
on AIX 7.3), so a program that keeps retiring Ms (for example a
goroutine that parks once and then returns while locked to its thread)
fails in semacreate with "fatal error: sem_init" after about 32000
retired threads. The malloc'd storage leaked as well.
Call sem_destroy and free from mdestroy, which runs after the exiting M
stops taking locks.
Add an AIX test that retires 40000 locked Ms that have each parked
once. It is in testprogcgo because without cgo, exited threads do not
exit on AIX until CL 849968 lands. Without the fix, the test fails with
"fatal error: sem_init".
Fixes #82305