]> Cypherpunks repositories - gostls13.git/commit
runtime: avoid allocation of internal panic values
authorRuss Cox <rsc@golang.org>
Fri, 20 Sep 2013 19:15:25 +0000 (15:15 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 20 Sep 2013 19:15:25 +0000 (15:15 -0400)
commit551ada4742d3df6a24ddab5516fc8646c8a28958
tree12604181fe8e0a6dce528997e76109fba2b793ca
parent81dc0b65b2f6b5b86fa4f4b02a5c26c8956ff3d8
runtime: avoid allocation of internal panic values

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
src/pkg/runtime/error.go
src/pkg/runtime/panic.c
src/pkg/runtime/proc.c
src/pkg/runtime/runtime.h
src/pkg/runtime/string.goc