--- a/lib/util/pthread_create_blocking_np.c 2021-12-24 19:27:38.000000000 +0000 +++ b/lib/util/pthread_create_blocking_np.c 2022-04-15 16:27:13.958553234 +0000 @@ -148,7 +148,7 @@ */ pthread_mutex_unlock(&U->mutex); err4: - pthread_cancel(*thread); + pthread_kill(*thread,0); pthread_join(*thread, NULL); err3: pthread_cond_destroy(&U->cond); --- a/spipe/main.c 2021-12-24 19:27:38.000000000 +0000 +++ b/spipe/main.c 2022-04-15 16:26:28.373620198 +0000 @@ -71,7 +71,7 @@ /* Cancel the threads. */ for (i = 0; i < 2; i++) { - if ((rc = pthread_cancel(ET->threads[i])) != 0) { + if ((rc = pthread_kill(ET->threads[i],0)) != 0) { /* * According to the POSIX standard, a Thread ID should * still be valid after pthread_exit has been invoked @@ -80,7 +80,7 @@ * this situation. */ if (rc != ESRCH) { - warn0("pthread_cancel: %s", strerror(rc)); + warn0("pthread_kill: %s", strerror(rc)); goto err0; } } @@ -310,13 +310,13 @@ exit(0); err6: - if ((rc = pthread_cancel(ET.threads[0])) != 0) - warn0("pthread_cancel: %s", strerror(rc)); + if ((rc = pthread_kill(ET.threads[0],0)) != 0) + warn0("pthread_kill: %s", strerror(rc)); if ((rc = pthread_join(ET.threads[0], NULL)) != 0) warn0("pthread_join: %s", strerror(rc)); err5: - if ((rc = pthread_cancel(ET.threads[1])) != 0) - warn0("pthread_cancel: %s", strerror(rc)); + if ((rc = pthread_kill(ET.threads[1],0)) != 0) + warn0("pthread_kill: %s", strerror(rc)); if ((rc = pthread_join(ET.threads[1], NULL)) != 0) warn0("pthread_join: %s", strerror(rc)); err4: