From 22cd4140502e67d32967160bee56375eaa285011 Mon Sep 17 00:00:00 2001
From: fujuntang <fujuntang@smartai.com>
Date: 星期二, 07 十二月 2021 16:18:34 +0800
Subject: [PATCH] Fix the service query fail issue.
---
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