• Dmitriy Vyukov's avatar
    runtime: refactor and fix stack management code · 1a89e638
    Dmitriy Vyukov authored
    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
    1a89e638
stack.h 3.93 KB