Определенно pthread_cancel
не освободит стек потока, учитывая, что отмененный поток может продолжаться некоторое время, например, при выполнении обработчиков отмены.
Ресурсы потока очищаются после того, как оба потока pthread_detach
были вызваны в потоке и поток завершился (что возможно в любом порядке).