From: Ian Lance Taylor Date: Wed, 27 Jun 2018 00:23:07 +0000 (-0700) Subject: misc/cgo/test: add retry loop around pthread_create in TestSigprocmask X-Git-Tag: go1.11beta2~280 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f03ee913e210e1b09bd33ed35c03ec8e4fc270be;p=gostls13.git misc/cgo/test: add retry loop around pthread_create in TestSigprocmask This is the same retry loop we use in _cgo_try_pthread_create in runtime/cgo. Fixes #25078 Change-Id: I7ef4d4fc7fb89cbfb674c4f93cbdd7a033dd8983 Reviewed-on: https://go-review.googlesource.com/121096 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/misc/cgo/test/sigprocmask.c b/misc/cgo/test/sigprocmask.c index bd99647d2b..e77ba5b08e 100644 --- a/misc/cgo/test/sigprocmask.c +++ b/misc/cgo/test/sigprocmask.c @@ -4,10 +4,12 @@ // +build !windows +#include #include #include #include #include +#include #include extern void IntoGoAndBack(); @@ -28,11 +30,22 @@ static void* sigthreadfunc(void* unused) { } int RunSigThread() { + int tries; pthread_t thread; int r; + struct timespec ts; - r = pthread_create(&thread, NULL, &sigthreadfunc, NULL); - if (r != 0) - return r; - return pthread_join(thread, NULL); + for (tries = 0; tries < 20; tries++) { + r = pthread_create(&thread, NULL, &sigthreadfunc, NULL); + if (r == 0) { + return pthread_join(thread, NULL); + } + if (r != EAGAIN) { + return r; + } + ts.tv_sec = 0; + ts.tv_nsec = (tries + 1) * 1000 * 1000; // Milliseconds. + nanosleep(&ts, NULL); + } + return EAGAIN; }