• Keith Randall's avatar
    runtime: always run semacquire on the G stack · da8cf543
    Keith Randall authored
    semacquire might need to park the currently running G.  It can
    only park if called from the G stack (because it has no way of
    saving the M stack state).  So all calls to semacquire must come
    from the G stack.
    
    The three violators are GOMAXPROCS, ReadMemStats, and WriteHeapDump.
    This change moves the semacquire call earlier, out of their C code
    and into their Go code.
    
    This seldom caused bugs because semacquire seldom actually had
    to park the caller.  But it did happen intermittently.
    
    Fixes #8749
    
    LGTM=dvyukov
    R=golang-codereviews, dvyukov, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/144940043
    da8cf543
proc.c 90.9 KB