• Russ Cox's avatar
    runtime: avoid allocation of internal panic values · 551ada47
    Russ Cox authored
    If a fault happens in malloc, inevitably the next thing that happens
    is a deadlock trying to allocate the panic value that says the fault
    happened. Stop doing that, two ways.
    
    First, reject panic in malloc just as we reject panic in garbage collection.
    
    Second, runtime.panicstring was using an error implementation
    backed by a Go string, so the interface held an allocated *string.
    Since the actual errors are C strings, define a new error
    implementation backed by a C char*, which needs no indirection
    and therefore no allocation.
    
    This second fix will avoid allocation for errors like nil panic derefs
    or division by zero, so it is worth doing even though the first fix
    should take care of faults during malloc.
    
    Update #6419
    
    R=golang-dev, dvyukov, dave
    CC=golang-dev
    https://golang.org/cl/13774043
    551ada47
panic.c 12.4 KB