Originariamente inviato da Smoke666
L'utilizzo di pthread_join non è signal safe
Su questo hai ragione, ma senza fare nessun jmp puoi fare:
codice:
void gestore(int sig)
{
    running = 0;    
    signal(SIGINT, SIG_DFL); //reimposti l'azione di default e riprendi l'esecuzione nella main
}

int main()
{
    signal(SIGINT, gestore); 
    init(); 
    serve(); 
    cleanup();
}