X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-events.c;h=f84a08d38f1d20c94c62d47d9391ecd7aa2e217e;hb=f7daf93a18ad80c6e32096383ad0ca61ab51129f;hp=4904a54575e512c1ed4297a98eed17e7abc95dea;hpb=51eab943fe37b0fdd541099c4d02ea7b57cb15bb;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/notification-thread-events.c b/src/bin/lttng-sessiond/notification-thread-events.c index 4904a5457..f84a08d38 100644 --- a/src/bin/lttng-sessiond/notification-thread-events.c +++ b/src/bin/lttng-sessiond/notification-thread-events.c @@ -235,7 +235,8 @@ void session_info_put(struct session_info *session_info); static struct session_info *session_info_create(const char *name, uid_t uid, gid_t gid, - struct lttng_session_trigger_list *trigger_list); + struct lttng_session_trigger_list *trigger_list, + struct cds_lfht *sessions_ht); static void session_info_add_channel(struct session_info *session_info, struct channel_info *channel_info); @@ -515,6 +516,11 @@ void session_info_destroy(void *_data) } } lttng_session_trigger_list_destroy(session_info->trigger_list); + + rcu_read_lock(); + cds_lfht_del(session_info->sessions_ht, + &session_info->sessions_ht_node); + rcu_read_unlock(); free(session_info->name); free(session_info); } @@ -539,7 +545,8 @@ void session_info_put(struct session_info *session_info) static struct session_info *session_info_create(const char *name, uid_t uid, gid_t gid, - struct lttng_session_trigger_list *trigger_list) + struct lttng_session_trigger_list *trigger_list, + struct cds_lfht *sessions_ht) { struct session_info *session_info; @@ -565,6 +572,7 @@ struct session_info *session_info_create(const char *name, uid_t uid, gid_t gid, session_info->uid = uid; session_info->gid = gid; session_info->trigger_list = trigger_list; + session_info->sessions_ht = sessions_ht; end: return session_info; error: @@ -1316,7 +1324,8 @@ struct session_info *find_or_create_session_info( sessions_ht_node); assert(session->uid == uid); assert(session->gid == gid); - goto error; + session_info_get(session); + goto end; } trigger_list = lttng_session_trigger_list_build(state, name); @@ -1324,7 +1333,8 @@ struct session_info *find_or_create_session_info( goto error; } - session = session_info_create(name, uid, gid, trigger_list); + session = session_info_create(name, uid, gid, trigger_list, + state->sessions_ht); if (!session) { ERR("[notification-thread] Failed to allocation session info for session \"%s\" (uid = %i, gid = %i)", name, uid, gid); @@ -1334,6 +1344,7 @@ struct session_info *find_or_create_session_info( cds_lfht_add(state->sessions_ht, hash_key_str(name, lttng_ht_seed), &session->sessions_ht_node); +end: rcu_read_unlock(); return session; error: @@ -1425,6 +1436,7 @@ int handle_notification_thread_command_add_channel( hash_channel_key(&new_channel_info->key), &channel_trigger_list->channel_triggers_ht_node); rcu_read_unlock(); + session_info_put(session_info); *cmd_result = LTTNG_OK; return 0; error: @@ -1515,6 +1527,27 @@ end: return 0; } +static +int handle_notification_thread_command_session_rotation_ongoing( + struct notification_thread_state *state, + const char *session_name, uint64_t trace_archive_chunk_id, + enum lttng_error_code *cmd_result) +{ + *cmd_result = LTTNG_OK; + return 0; +} + +static +int handle_notification_thread_command_session_rotation_completed( + struct notification_thread_state *state, + const char *session_name, uint64_t trace_archive_chunk_id, + const struct lttng_trace_archive_location *location, + enum lttng_error_code *cmd_result) +{ + *cmd_result = LTTNG_OK; + return 0; +} + static int condition_is_supported(struct lttng_condition *condition) { @@ -2006,6 +2039,23 @@ int handle_notification_thread_command( cmd->parameters.remove_channel.domain, &cmd->reply_code); break; + case NOTIFICATION_COMMAND_TYPE_SESSION_ROTATION_ONGOING: + DBG("[notification-thread] Received session rotation ongoing command"); + ret = handle_notification_thread_command_session_rotation_ongoing( + state, + cmd->parameters.session_rotation_ongoing.session_name, + cmd->parameters.session_rotation_ongoing.trace_archive_chunk_id, + &cmd->reply_code); + break; + case NOTIFICATION_COMMAND_TYPE_SESSION_ROTATION_COMPLETED: + DBG("[notification-thread] Received session rotation completed command"); + ret = handle_notification_thread_command_session_rotation_completed( + state, + cmd->parameters.session_rotation_completed.session_name, + cmd->parameters.session_rotation_completed.trace_archive_chunk_id, + cmd->parameters.session_rotation_completed.location, + &cmd->reply_code); + break; case NOTIFICATION_COMMAND_TYPE_QUIT: DBG("[notification-thread] Received quit command"); cmd->reply_code = LTTNG_OK;