X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Fsession.c;h=c7ce843d71669f3b40609293341dbf8f665a73a1;hb=48842b309b2000205367409c0f29ca40ec3e251c;hp=aaca9f9370510a6765524fe27302c19ff192f3a4;hpb=54d01ffb43587b221dc50ec42b6070fad89bd255;p=lttng-tools.git diff --git a/ltt-sessiond/session.c b/ltt-sessiond/session.c index aaca9f937..c7ce843d7 100644 --- a/ltt-sessiond/session.c +++ b/ltt-sessiond/session.c @@ -21,12 +21,16 @@ #include #include #include +#include #include #include +#include "hashtable.h" #include "session.h" +#include "../hashtable/hash.h" + /* * NOTES: * @@ -113,27 +117,25 @@ void session_unlock(struct ltt_session *session) } /* - * Return a ltt_session structure ptr that matches name. - * If no session found, NULL is returned. + * Return a ltt_session structure ptr that matches name. If no session found, + * NULL is returned. This must be called with the session lock held using + * session_lock_list and session_unlock_list. */ struct ltt_session *session_find_by_name(char *name) { - int found = 0; struct ltt_session *iter; - session_lock_list(); + DBG2("Trying to find session by name %s", name); + cds_list_for_each_entry(iter, <t_session_list.head, list) { if (strncmp(iter->name, name, NAME_MAX) == 0) { - found = 1; - break; + goto found; } } - session_unlock_list(); - if (!found) { - iter = NULL; - } + iter = NULL; +found: return iter; } @@ -142,23 +144,18 @@ struct ltt_session *session_find_by_name(char *name) * * Return -1 if no session is found. On success, return 1; */ -int session_destroy(char *name) +int session_destroy(struct ltt_session *session) { - struct ltt_session *iter, *tmp; - - session_lock_list(); - cds_list_for_each_entry_safe(iter, tmp, <t_session_list.head, list) { - if (strcmp(iter->name, name) == 0) { - DBG("Destroying session %s", iter->name); - del_session_list(iter); - free(iter->name); - free(iter->path); - pthread_mutex_destroy(&iter->lock); - free(iter); - break; - } + /* Safety check */ + if (session == NULL) { + ERR("Session pointer was null on session destroy"); + return LTTCOMM_OK; } - session_unlock_list(); + + DBG("Destroying session %s", session->name); + del_session_list(session); + pthread_mutex_destroy(&session->lock); + free(session); return LTTCOMM_OK; } @@ -187,7 +184,7 @@ int session_create(char *name, char *path) /* Define session name */ if (name != NULL) { - if (asprintf(&new_session->name, "%s", name) < 0) { + if (snprintf(new_session->name, NAME_MAX, "%s", name) < 0) { ret = LTTCOMM_FATAL; goto error_asprintf; } @@ -199,7 +196,7 @@ int session_create(char *name, char *path) /* Define session system path */ if (path != NULL) { - if (asprintf(&new_session->path, "%s", path) < 0) { + if (snprintf(new_session->path, PATH_MAX, "%s", path) < 0) { ret = LTTCOMM_FATAL; goto error_asprintf; } @@ -211,9 +208,7 @@ int session_create(char *name, char *path) /* Init kernel session */ new_session->kernel_session = NULL; - - /* Init UST session list */ - CDS_INIT_LIST_HEAD(&new_session->ust_session_list.head); + new_session->ust_session = NULL; /* Init lock */ pthread_mutex_init(&new_session->lock, NULL);