From a4d18d6ab3216ce1bf8052f0fdc4ea34bc6385e8 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期三, 20 一月 2021 19:39:17 +0800
Subject: [PATCH] update

---
 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