From: David du Colombier <0intro@gmail.com> Date: Wed, 9 Apr 2014 04:41:14 +0000 (+0200) Subject: runtime: fix GOTRACEBACK on Plan 9 X-Git-Tag: go1.3beta1~150 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a07f6adda8663f86701356bca341112846ed251f;p=gostls13.git runtime: fix GOTRACEBACK on Plan 9 Getenv() should not call malloc when called from gotraceback(). Instead, we return a static buffer in this case, with enough room to hold the longest value. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/85680043 --- diff --git a/src/pkg/runtime/env_plan9.c b/src/pkg/runtime/env_plan9.c index 599319c755..f732c9f294 100644 --- a/src/pkg/runtime/env_plan9.c +++ b/src/pkg/runtime/env_plan9.c @@ -12,6 +12,7 @@ runtime·getenv(int8 *s) intgo len; byte file[128]; byte *p; + static byte b[128]; len = runtime·findnull((byte*)s); if(len > sizeof file-6) @@ -25,7 +26,14 @@ runtime·getenv(int8 *s) if(fd < 0) return nil; n = runtime·seek(fd, 0, 2); - p = runtime·malloc(n+1); + if(runtime·strcmp((byte*)s, (byte*)"GOTRACEBACK") == 0){ + // should not call malloc + if(n >= sizeof b) + return nil; + runtime·memclr(b, sizeof b); + p = b; + }else + p = runtime·malloc(n+1); r = runtime·pread(fd, p, n, 0); runtime·close(fd); if(r < 0)