aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/testdata
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2022-01-24 09:27:31 -0500
committerAustin Clements <austin@google.com>2022-01-24 14:54:34 +0000
commit19d819d49c73c8e47749b3c4cbbc2e58a259269a (patch)
treef0c80e3e21870cafa1424cf88fe12e58c195d9c3 /src/runtime/testdata
parent0ef6dd74409506eb084bd8d2fe61e0e70ed9e5a4 (diff)
downloadgo-19d819d49c73c8e47749b3c4cbbc2e58a259269a.tar.xz
runtime: call fflush before exiting in C test
Very, very rarely TestVectoredHandlerDontCrashOnLibrary fails because the C subprocess exits with a 0 status code and no output. This appears to happen because C does not actually guarantee that stdout will be flushed on exit and somehow, very rarely, it is not flushed. Add explicit fflushes to fix this. This reduces the failure rate of TestVectoredHandlerDontCrashOnLibrary from 0.0013% to 0% in 250,000 iterations. Fixes #49959. Change-Id: I892cf49a165ac91134c5da37588a2ab11e1f3f8b Reviewed-on: https://go-review.googlesource.com/c/go/+/380494 Trust: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com>
Diffstat (limited to 'src/runtime/testdata')
-rw-r--r--src/runtime/testdata/testwinlib/main.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/runtime/testdata/testwinlib/main.c b/src/runtime/testdata/testwinlib/main.c
index e84a32f753..c3fe3cb071 100644
--- a/src/runtime/testdata/testwinlib/main.c
+++ b/src/runtime/testdata/testwinlib/main.c
@@ -41,17 +41,20 @@ int main()
if (NULL == exceptionHandlerHandle)
{
printf("cannot add vectored exception handler\n");
+ fflush(stdout);
return 2;
}
void *continueHandlerHandle = AddVectoredContinueHandler(0, customContinueHandlder);
if (NULL == continueHandlerHandle)
{
printf("cannot add vectored continue handler\n");
+ fflush(stdout);
return 2;
}
CallMeBack(throwFromC);
RemoveVectoredContinueHandler(continueHandlerHandle);
RemoveVectoredExceptionHandler(exceptionHandlerHandle);
printf("exceptionCount: %d\ncontinueCount: %d\n", exceptionCount, continueCount);
+ fflush(stdout);
return 0;
-} \ No newline at end of file
+}