www.pudn.com > streamrtp.rar > rtpreleasestream.c


/*-------------------------------------------------------------------------
 * rtpreleasestream.c - rtpreleasestream
 *-------------------------------------------------------------------------
 */

#include 
#include 
#include 

/*------------------------------------------------------------------------
 * rtpreleasestream - decrement a streams refcnt and remove if necessary
 *------------------------------------------------------------------------
 */
int
rtpreleasestream(struct session *psn, struct stream *pstm)
{

	if (pthread_mutex_lock(&psn->sn_getstreammutex) != 0)
		return ERROR;

	pstm->stm_refcnt--;
  
	if (pstm->stm_refcnt == 0 && pstm->stm_zombie == TRUE) {
		/*
		 * Remove this stream from the Cname->SSRC mapping.
		 */
		rtcpcnamerem(psn, pstm);

		/*
		 * Remove this stream from the SSRC->struct stream *
		 * hashtable. The htdel function will invoke
		 * rtpdestroystream.
		 */
		htdel(psn->sn_ssrcs, pstm->stm_ssrc);
	}
	pthread_mutex_unlock(&psn->sn_getstreammutex);

	return OK;
}