int rms_shutdown(void) { rms_channel *channel; rmsb->active = 0; uthread_destroy(&(rmsb->rms_rcv_thr)); uthread_destroy(&(rmsb->rms_snd_thr)); uthread_destroy(&(rmsb->rms_mgr_thr)); if(rmsb->listening) { shutdown(rmsb->sock); close(rmsb->sock); } while( (channel = (rms_channel*)mqueue_remove(rmsb->mq_channels))) { rms_channel_close(channel); } mqueue_destroy( rmsb->mq_channels); uthread_mutex_lock(&rmsb->mutx_rmscb); while( (channel = (rms_channel*)mqueue_deq(rmsb->mq_channel_tmp))) { rms_channel_close(channel); } mqueue_destroy( rmsb->mq_channels_tmp); uthread_mutex_unlock(&rmsb->mutx_rmscb); uthread_mutex_destroy(&rmsb->mutx_rmscb); rmsb->state = 0; free(rmsb->hostname); rmsb->initialized = -1; return 0; }
static inline void coro_destroy(coro_t *co) { double_link_remove(&(*co)->dblink); if((*co)->stack); free((*co)->stack); uthread_destroy(&((*co)->ut)); free(*co); *co = NULL; }