From 68d23225a38a35f1325eb39fa4ed5a005d5de473 Mon Sep 17 00:00:00 2001 From: fujuntang <fujuntang@aiot.com> Date: 星期三, 11 八月 2021 09:50:20 +0800 Subject: [PATCH] fix from 3.1 first commit --- test/futex_test.cpp | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/test/futex_test.cpp b/test/futex_test.cpp index 3b31ba4..2e90999 100644 --- a/test/futex_test.cpp +++ b/test/futex_test.cpp @@ -46,6 +46,8 @@ { int s; + sigset_t mask_all, pre; + sigfillset(&mask_all); /* __sync_bool_compare_and_swap(ptr, oldval, newval) is a gcc built-in function. It atomically performs the equivalent of: @@ -60,11 +62,12 @@ /* Is the futex available? */ - if (__sync_bool_compare_and_swap(futexp, 1, 0)) + if (__sync_bool_compare_and_swap(futexp, 1, 0)) { + sigprocmask(SIG_BLOCK, &mask_all, &pre); break; /* Yes */ + } /* Futex is not available; wait */ - s = futex(futexp, FUTEX_WAIT, 0, NULL, NULL, 0); if (s == -1 && errno != EAGAIN) errExit("futex-FUTEX_WAIT"); @@ -79,12 +82,14 @@ fpost(int *futexp) { int s; - + sigset_t mask; + sigemptyset(&mask); /* __sync_bool_compare_and_swap() was described in comments above */ if (__sync_bool_compare_and_swap(futexp, 0, 1)) { s = futex(futexp, FUTEX_WAKE, 1, NULL, NULL, 0); + sigprocmask(SIG_SETMASK, &mask, NULL); if (s == -1) errExit("futex-FUTEX_WAKE"); } -- Gitblit v1.8.0