www.pudn.com > RTP通用开发库(for Linux).rar > rtcprecvthreadfcn.c
/*------------------------------------------------------------------------- * rtcprecvthreadfcn.c - rtcprecvthreadfcn *------------------------------------------------------------------------- */ #include#include #include #include #include #include /*------------------------------------------------------------------------ * rtcprecvthreadfcn - loop to receive RTCP packets. *------------------------------------------------------------------------ */ void rtcprecvthreadfcn(struct session *psn) { /* * Initialize by setting signal handler, then signal condition to * indicate that initialization is complete. This code prevents * rtpctl from sending a SIGTERM *before* the handler is installed. */ pthread_mutex_lock(&psn->sn_rtcpthrmutex); signal(SIGTERM, nullfcn); psn->sn_rtcpthrstat = THR_RUNNING; pthread_cond_signal(&psn->sn_cond); pthread_mutex_unlock(&psn->sn_rtcpthrmutex); while(TRUE) { rtcprecv(psn); /* * Check if a SIGTERM has been received. * If so, return. */ pthread_mutex_lock(&psn->sn_rtcpthrmutex); if (psn->sn_rtcpthrstat == THR_TERMINATE) { psn->sn_rtcpthrstat = THR_NOTRUNNING; pthread_cond_signal(&psn->sn_cond); pthread_mutex_unlock(&psn->sn_rtcpthrmutex); return; } pthread_mutex_unlock(&psn->sn_rtcpthrmutex); } }