]> Cypherpunks repositories - gostls13.git/commit
runtime: refactor and fix stack management code
authorDmitriy Vyukov <dvyukov@google.com>
Fri, 7 Mar 2014 16:52:29 +0000 (20:52 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Fri, 7 Mar 2014 16:52:29 +0000 (20:52 +0400)
commit1a89e6388c3f1994da17a1d91a45920663db2af5
treeb17c5bed1b1bee0e888c4f1e803019a22960c4a2
parentf946a7ca0971027a71e057c2650fdf63d54543e8
runtime: refactor and fix stack management code
There are at least 3 bugs:
1. g->stacksize accounting is broken during copystack/shrinkstack
2. stktop->free is not properly maintained during copystack/shrinkstack
3. stktop->free logic is broken:
        we can have stktop->free==FixedStack,
        and we will free it into stack cache,
        but it actually comes from heap as the result of non-copying segment shrink
This shows as at least spurious races on race builders (maybe something else as well I don't know).

The idea behind the refactoring is to consolidate stacksize and
segment origin logic in stackalloc/stackfree.

Fixes #7490.

LGTM=rsc, khr
R=golang-codereviews, rsc, khr
CC=golang-codereviews
https://golang.org/cl/72440043
src/pkg/runtime/panic.c
src/pkg/runtime/proc.c
src/pkg/runtime/runtime.h
src/pkg/runtime/stack.c
src/pkg/runtime/stack.h