Esempio n. 1
0
void panda_mux_unref(
	PandaMux mux) {
	size_t count;
	if (mux == NULL)
		return;
	pthread_mutex_lock(&mux->mutex);
	count = --(mux->refcnt);
	pthread_mutex_unlock(&mux->mutex);
	if (count == 0) {
		pthread_mutex_destroy(&mux->mutex);

		panda_log_proxy_unref(mux->logger);

		pthread_mutex_lock(&mux->next_mutex);
		DESTROY_MEMBER(mux, next);
		pthread_mutex_unlock(&mux->next_mutex);
		pthread_mutex_destroy(&mux->next_mutex);

		pthread_rwlock_wrlock(&mux->noalgn_rwlock);
		DESTROY_MEMBER(mux, noalgn);
		pthread_rwlock_unlock(&mux->noalgn_rwlock);
		pthread_rwlock_destroy(&mux->noalgn_rwlock);
		free(mux);
	}
}
Esempio n. 2
0
void panda_assembler_unref(
	PandaAssembler assembler) {
	size_t count;
	if (assembler == NULL)
		return;
#ifdef HAVE_PTHREAD
	pthread_mutex_lock(&assembler->mutex);
#endif
	count = --(assembler->refcnt);
#ifdef HAVE_PTHREAD
	pthread_mutex_unlock(&assembler->mutex);
#endif
	if (count == 0) {
#ifdef HAVE_PTHREAD
		pthread_mutex_destroy(&assembler->mutex);
#endif
		free(assembler->kmerseen);
		module_destroy(assembler);
		DESTROY_MEMBER(assembler, next);
		DESTROY_MEMBER(assembler, noalgn);
		panda_algorithm_unref(assembler->algo);
		panda_log_proxy_unref(assembler->logger);
		free(assembler);
	}
}
Esempio n. 3
0
void hang_free(
	void *user_data) {
	struct hang_data *hang_data = (struct hang_data *) user_data;
	DESTROY_MEMBER(hang_data, next);
	panda_log_proxy_unref(hang_data->logger);
	free(hang_data);
}