]> Kevux Git Server - fll/commitdiff
Update: handle POSIX compatibility automatically in f_thread_cancel_state_set().
authorKevin Day <thekevinday@gmail.com>
Sat, 10 Apr 2021 15:32:15 +0000 (10:32 -0500)
committerKevin Day <thekevinday@gmail.com>
Sat, 10 Apr 2021 15:32:15 +0000 (10:32 -0500)
The POSIX standard does not explicitly define that this parameter can be NULL.
To prevent any possible problems, allow NULL but when NULL is received, use a temporary variable in its place.

level_0/f_thread/c/thread.c
level_0/f_thread/c/thread.h

index d0c410ceacc68daf76780301bb51a253f3406416..3b553cc6fcc4b04df04ec958cfe2415d17ab7930 100644 (file)
@@ -882,7 +882,17 @@ extern "C" {
 #ifndef _di_f_thread_cancel_state_set_
   f_status_t f_thread_cancel_state_set(const int state, int *previous) {
 
-    const int error = pthread_setcancelstate(state, previous);
+    int error = 0;
+
+    // POSIX doesn't allow this to be NULL, so make POSIX happy.
+    if (previous == 0) {
+      int ignore = 0;
+
+      error = pthread_setcancelstate(state, &ignore);
+    }
+    else {
+      error = pthread_setcancelstate(state, previous);
+    }
 
     if (error) {
       if (error == EINVAL) return F_status_set_error(F_parameter);
index 22ba1f6fc5af29c5873ad0be2cb448ed91e573aa..65ba7ba4dfee3748f336b93cf5875e402f81b24e 100644 (file)
@@ -1183,7 +1183,6 @@ extern "C" {
  * @param previous
  *   (optional) The previously assigned cancellation state.
  *   Set to NULL to not use.
- *   (Note: Linux allows this to be optional/NULL but POSIX does not explicitly defined this and there may be portability issues.)
  *
  * @return
  *   F_none on success.