Ваша проблема в том, что вы не вызвали pthread_detach в рассматриваемых потоках. Это говорит pthread, что ресурсы, связанные с каждым потоком, будут освобождены, когда поток завершится. Вы должны вызвать либо pthread_join, либо pthread_release во всех потоках, чтобы освободить ресурсы потоков. Это означает, что вы также должны вызывать pthread_detach в ваших обработчиках отмены pthread_join или утечка.