#include <urcu.h>
#include <dirent.h>
#include <sys/types.h>
+#include <pthread.h>
#include <common/common.h>
#include <common/sessiond-comm/sessiond-comm.h>
static struct ltt_session_list ltt_session_list = {
.head = CDS_LIST_HEAD_INIT(ltt_session_list.head),
.lock = PTHREAD_MUTEX_INITIALIZER,
+ .removal_cond = PTHREAD_COND_INITIALIZER,
.next_uuid = 0,
};
return <t_session_list;
}
+/*
+ * Returns once the session list is empty.
+ */
+void session_list_wait_empty(void)
+{
+ pthread_mutex_lock(<t_session_list.lock);
+ while (!cds_list_empty(<t_session_list.head)) {
+ pthread_cond_wait(<t_session_list.removal_cond,
+ <t_session_list.lock);
+ }
+ pthread_mutex_unlock(<t_session_list.lock);
+}
+
/*
* Acquire session list lock
*/
consumer_output_put(session->consumer);
snapshot_destroy(&session->snapshot);
+
+ ASSERT_LOCKED(ltt_session_list.lock);
del_session_list(session);
del_session_ht(session);
+ pthread_cond_broadcast(<t_session_list.removal_cond);
free(session);
}