Explorar el Código

merge fixes from upstream (rev 1.10 -> 1.13)

Mike Frysinger hace 17 años
padre
commit
bb913f1c1c
Se han modificado 1 ficheros con 5 adiciones y 2 borrados
  1. 5 2
      libpthread/linuxthreads.old/cancel.c

+ 5 - 2
libpthread/linuxthreads.old/cancel.c

@@ -62,6 +62,7 @@ int pthread_cancel(pthread_t thread)
   int dorestart = 0;
   pthread_descr th;
   pthread_extricate_if *pextricate;
+  int already_canceled;
 
   __pthread_lock(&handle->h_lock, NULL);
   if (invalid_handle(handle, thread)) {
@@ -71,13 +72,15 @@ int pthread_cancel(pthread_t thread)
 
   th = handle->h_descr;
 
-  if (th->p_canceled) {
+  already_canceled = th->p_canceled;
+  th->p_canceled = 1;
+
+  if (th->p_cancelstate == PTHREAD_CANCEL_DISABLE || already_canceled) {
     __pthread_unlock(&handle->h_lock);
     return 0;
   }
 
   pextricate = th->p_extricate;
-  th->p_canceled = 1;
   pid = th->p_pid;
 
   /* If the thread has registered an extrication interface, then