From c8214c78bd2f8ad308119dc2344634993ab499c8 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 15 Feb 2013 14:48:35 -0500 Subject: [PATCH] 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 --- src/pkg/runtime/proc.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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;