diff options
author | Ian Lance Taylor <iant@golang.org> | 2018-06-26 17:23:07 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2018-06-27 04:33:10 +0000 |
commit | f03ee913e210e1b09bd33ed35c03ec8e4fc270be (patch) | |
tree | 83f61c018ad442ec912dbb67f5c04820f242acb7 /misc | |
parent | fbfd38c575b594eb49ba9c8c38e295b99b299561 (diff) | |
download | go-git-f03ee913e210e1b09bd33ed35c03ec8e4fc270be.tar.gz |
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 <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'misc')
-rw-r--r-- | misc/cgo/test/sigprocmask.c | 21 |
1 files changed, 17 insertions, 4 deletions
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 <errno.h> #include <signal.h> #include <stdlib.h> #include <pthread.h> #include <stdio.h> +#include <time.h> #include <unistd.h> 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; } |