From: Russ Cox Date: Fri, 15 Feb 2013 19:48:35 +0000 (-0500) Subject: runtime: make return from main wait for active panic X-Git-Tag: go1.1rc2~996 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c8214c78bd2f8ad308119dc2344634993ab499c8;p=gostls13.git runtime: make return from main wait for active panic Arguably if this happens the program is buggy anyway, but letting the panic continue looks better than interrupting it. Otherwise things like this are possible, and confusing: $ go run x.go panic: $ echo $? 0 $ Fixes #3934. R=golang-dev, r CC=golang-dev https://golang.org/cl/7322083 --- diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 8a6fa378f2..5c60cddf9b 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -253,6 +253,14 @@ runtime·main(void) main·main(); if(raceenabled) runtime·racefini(); + + // Make racy client program work: if panicking on + // another goroutine at the same time as main returns, + // let the other goroutine finish printing the panic trace. + // Once it does, it will exit. See issue 3934. + if(runtime·panicking) + runtime·park(nil, nil, "panicwait"); + runtime·exit(0); for(;;) *(int32*)runtime·main = 0;