about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2022-05-31 17:13:35 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2022-06-08 09:23:02 -0300
commitc7d36dcecc08a29825175f65c4ee873ff3177a23 (patch)
treed59c11ae89ad4d87b65cc9f742c25cc87c2cd9c5 /nptl
parentc28db9cb29a7d6cf3ce08fd8445e6b7dea03f35b (diff)
downloadglibc-c7d36dcecc08a29825175f65c4ee873ff3177a23.tar.gz
glibc-c7d36dcecc08a29825175f65c4ee873ff3177a23.tar.xz
glibc-c7d36dcecc08a29825175f65c4ee873ff3177a23.zip
nptl: Fix __libc_cleanup_pop_restore asynchronous restore (BZ#29214)
This was due a wrong revert done on 404656009b459658.

Checked on x86_64-linux-gnu.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/libc-cleanup.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/nptl/libc-cleanup.c b/nptl/libc-cleanup.c
index c4a83591bf..2ce59388d4 100644
--- a/nptl/libc-cleanup.c
+++ b/nptl/libc-cleanup.c
@@ -57,7 +57,8 @@ __libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer)
   THREAD_SETMEM (self, cleanup, buffer->__prev);
 
   int cancelhandling = atomic_load_relaxed (&self->cancelhandling);
-  if (cancelhandling & CANCELTYPE_BITMASK)
+  if (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED
+      && (cancelhandling & CANCELTYPE_BITMASK) == 0)
     {
       int newval;
       do