int streamxmit_close(STREAM_RTP_DEST_T *pDest, int lock) { int rc = 0; STREAM_XMIT_QUEUE_T *pAsyncQ; if(!pDest) { return -1; } pAsyncQ = &pDest->asyncQ; if(lock) { pthread_mutex_lock(&pDest->pRtpMulti->mtx); } if(pAsyncQ->pQ) { pktqueue_destroy(pAsyncQ->pQ); pAsyncQ->doAsyncXmit = 0; pAsyncQ->doRtcpNack = 0; pAsyncQ->pQ = NULL; pthread_mutex_destroy(&pAsyncQ->mtx); } burstmeter_close(&pAsyncQ->retransmissionMeter); if(lock) { pthread_mutex_unlock(&pDest->pRtpMulti->mtx); } return rc; }
static void end(void) { sessiondb_destroy(); bibdb_destroy(); pool6_destroy(); pool4_destroy(); pktqueue_destroy(); config_destroy(); }
void sessiondb_destroy(void) { log_debug("Emptying the session tables..."); sessiontable_destroy(&session_table_udp); sessiontable_destroy(&session_table_tcp); sessiontable_destroy(&session_table_icmp); pktqueue_destroy(); session_destroy(); }
static bool init(void) { int i; for (i = 0; i < ARRAY_SIZE(IPV4_ADDRS); i++) { if (is_error(str_to_addr4(IPV4_ADDRS[i], &addr4[i].l3))) return false; addr4[i].l4 = IPV4_PORTS[i]; } for (i = 0; i < ARRAY_SIZE(IPV4_ADDRS); i++) { if (is_error(str_to_addr6(IPV6_ADDRS[i], &addr6[i].l3))) return false; addr6[i].l4 = IPV6_PORTS[i]; } if (is_error(config_init(false))) goto config_fail; if (is_error(pktqueue_init())) goto pktqueue_fail; if (is_error(pool4_init(NULL, 0))) goto pool4_fail; if (is_error(pool6_init(NULL, 0))) goto pool6_fail; if (is_error(bibdb_init())) goto bib_fail; if (is_error(sessiondb_init())) goto session_fail; return true; session_fail: bibdb_destroy(); bib_fail: pool6_destroy(); pool6_fail: pool4_destroy(); pool4_fail: pktqueue_destroy(); pktqueue_fail: config_destroy(); config_fail: return false; }
void playerclose(void *hplayer) { if (!hplayer) return; PLAYER *player = (PLAYER*)hplayer; player->nPlayerStatus = PS_CLOSE; renderstart(player->hCoreRender); //++ make sure packet queue not empty ++// if (pktqueue_isempty_a(&(player->PacketQueue))) { pktqueue_write_request(&(player->PacketQueue), NULL); pktqueue_write_done_a(&(player->PacketQueue)); } if (pktqueue_isempty_v(&(player->PacketQueue))) { pktqueue_write_request(&(player->PacketQueue), NULL); pktqueue_write_done_v(&(player->PacketQueue)); } //-- make sure packet queue not empty --// // wait audio/video demuxing thread exit pthread_join(player->hAVDemuxThread, NULL); // wait audio decoding thread exit pthread_join(player->hADecodeThread, NULL); // wait video decoding thread exit pthread_join(player->hVDecodeThread, NULL); // destroy packet queue pktqueue_destroy(&(player->PacketQueue)); if (player->hCoreRender ) renderclose(player->hCoreRender); if (player->pVideoCodecContext) avcodec_close(player->pVideoCodecContext); if (player->pAudioCodecContext) avcodec_close(player->pAudioCodecContext); if (player->pAVFormatContext ) avformat_close_input(&(player->pAVFormatContext)); free(player); // close log // log_done(); }
static void __exit nat64_exit(void) { /* Release the hook. */ nf_unregister_hooks(nfho, ARRAY_SIZE(nfho)); /* Deinitialize the submodules. */ #ifdef BENCHMARK logtime_destroy(); #endif sendpkt_destroy(); translate_packet_destroy(); filtering_destroy(); fragdb_destroy(); sessiondb_destroy(); bibdb_destroy(); pktqueue_destroy(); pool4_destroy(); pool6_destroy(); config_destroy(); log_info(MODULE_NAME " module removed."); }
bool init_full(void) { char *prefixes[] = { "3::/96" }; int error; error = config_init(false); if (error) goto config_fail; error = pool6_init(prefixes, ARRAY_SIZE(prefixes)); if (error) goto pool6_fail; error = pool4_init(NULL, 0); if (error) goto pool4_fail; error = pktqueue_init(); if (error) goto pktqueue_fail; error = bibdb_init(); if (error) goto bibdb_fail; error = sessiondb_init(); if (error) goto sessiondb_fail; return true; sessiondb_fail: bibdb_destroy(); bibdb_fail: pktqueue_destroy(); pktqueue_fail: pool4_destroy(); pool4_fail: pool6_destroy(); pool6_fail: config_destroy(); config_fail: return false; }
static void end(void) { sessiondb_destroy(); pktqueue_destroy(); }
static int __init nat64_init(void) { int error; log_debug("%s", banner); log_debug("Inserting the module..."); /* Init Jool's submodules. */ error = config_init(); if (error) goto config_failure; error = pool6_init(pool6, pool6_size); if (error) goto pool6_failure; error = pool4_init(pool4, pool4_size); if (error) goto pool4_failure; error = pktqueue_init(); if (error) goto pktqueue_failure; error = bibdb_init(); if (error) goto bib_failure; error = sessiondb_init(); if (error) goto session_failure; error = fragdb_init(); if (error) goto fragdb_failure; error = filtering_init(); if (error) goto filtering_failure; error = translate_packet_init(); if (error) goto translate_packet_failure; error = sendpkt_init(); if (error) goto sendpkt_failure; #ifdef BENCHMARK error = logtime_init(); if (error) goto log_time_failure; #endif /* Hook Jool to Netfilter. */ error = nf_register_hooks(nfho, ARRAY_SIZE(nfho)); if (error) goto nf_register_hooks_failure; /* Yay */ log_info(MODULE_NAME " module inserted."); return error; nf_register_hooks_failure: #ifdef BENCHMARK logtime_destroy(); log_time_failure: #endif sendpkt_destroy(); sendpkt_failure: translate_packet_destroy(); translate_packet_failure: filtering_destroy(); filtering_failure: fragdb_destroy(); fragdb_failure: sessiondb_destroy(); session_failure: bibdb_destroy(); bib_failure: pktqueue_destroy(); pktqueue_failure: pool4_destroy(); pool4_failure: pool6_destroy(); pool6_failure: config_destroy(); config_failure: return error; }