Non è certo quello il modo.
Il thread termina quando ha finito quello che deve fare. Al massimo puoi aspettarlo nel main con una apposita pthread_join() (consulta la documentazione a riguardo).
Piuttosto, ho visto che fai una "read()" e una "recv()" bloccanti (presumo).
Se il thread si blocca in ascolto su una di quelle e ne fai partire altri frequentemente, gli array sullo stack si accumulano mangiando memoria.
Ti consiglio di commentare l'intero blocco di funzione e vedere se decommentando un pò alla volta riesci a isolare il problema.