Esempio n. 1
0
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;
}
Esempio n. 2
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;
}