The wait I'm referring to is the one on the semaphore underlying to the condition variable (pthread_sem_take on cond->sem). This ends up as a call to nxsem_wait_uninterruptible which loops on the wait to ignore EINTR errors. So I understand that a signal would not interrupt the wait (and thus, the call to pthread_cond_wait).
When the thread is canceled, nxsem_wait() will return ECANCELED. In that case, nxsem_wait_interruptible() will return the error.
If you continue to loop, then cancellation is not ocurring (i.e., EINTR is received not ECANCELED). This would be the case if, for example, you attached a signal handler to the signal used for cancellation