Change information
Commit message:
runtime: lock M for the entire fast path
In size-specialized malloc, the fast path assumes that GC marking is not
occurring. Thus once we decide to take the fast path, we must guarantee
that the GC cannot start.
No such guarantee exists today because the forceSlowPath check occurs
outside of any locking.
This may not have any impact on normal builds because we don't async
preempt the runtime, and I'm not sure there are any preemptible calls
before acquirem. But when inlining is disabled, there are preemptible
calls which could thus allow a GC cycle to start.
Fix this by calling acquirem prior to the forceSlowPath check and
holding it through inlinedStub.
Note that the slow path takes acquirem a bit later because we must not
acquirem before deductAssistCredit, as that function won't run any
assists when locked.
For #79667.
For #79699.
Change-Id: Ief7220435b6a5fd70d721f58cbeac86e6a6a6964
Files:
- M src/runtime/malloc_generated.go
- M src/runtime/malloc_stubs.go
Change size: M
Delta: 2 files changed, 105 insertions(+), 24 deletions(-)
Branch: refs/heads/master