www.pudn.com > RTP通用开发库(for Linux).rar > rtpclose.c
/*------------------------------------------------------------------------- * rtpclose.c - rtpclose *------------------------------------------------------------------------- */ #include#include #include #include #include #include #include /*------------------------------------------------------------------------ * rtpclose - close the rtp session pointed to by psn *------------------------------------------------------------------------ */ int rtpclose(struct session *psn) { bool false = FALSE; /* * Stop threads cleanly. */ rtpctl(psn, RTP_CTL_RTCPRECVTHREAD, (char *) &false, 0, 0); rtpctl(psn, RTP_CTL_RTPRECVTHREAD, (char *) &false, 0, 0); rtpctl(psn, RTP_CTL_RTCPCYCLETHREAD, (char *) &false, 0, 0); /* * Send RTCP bye message to group. */ rtcpsendbye(psn, "Leaving"); /* * Release all resources. */ close(psn->sn_rtpfd); close(psn->sn_rtcpfd); htdestroy(psn->sn_cnames); htdestroy(psn->sn_ssrcs); bufpooldestroy(&psn->sn_bpool); free(psn->sn_cyclesources); free(psn->sn_cyclebuf); /* assume no mutexes held at this point */ pthread_cond_destroy(&psn->sn_cond); pthread_mutex_destroy(&psn->sn_mutex); pthread_mutex_destroy(&psn->sn_rtpthrmutex); pthread_mutex_destroy(&psn->sn_rtcpthrmutex); pthread_mutex_destroy(&psn->sn_rtcpcyclethrmutex); pthread_mutex_destroy(&psn->sn_getstreammutex); pthread_mutex_destroy(&psn->sn_cnamemutex); free(psn); return OK; }