Even more details: void pa_semaphore_wait(pa_semaphore *s) { int ret; pa_assert(s); do { ret = sem_wait(&s->sem); } while (ret < 0 && errno == EINTR); pa_assert(ret == 0); } Actually it hangs in sem_wait(...) API function.