}
lttng_dynamic_array_reset(&session->destroy_notifiers);
lttng_dynamic_array_reset(&session->clear_notifiers);
+
free(session->last_archived_chunk_name);
free(session->base_path);
lttng_trigger_put(session->rotate_trigger);
- free(session);
+ delete (session);
if (session_published) {
/*
* Broadcast after free-ing to ensure the memory is
* Create a new session and add it to the session list.
* Session list lock must be held by the caller.
*/
-enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
+enum lttng_error_code session_create(const char *name,
+ uid_t uid,
+ gid_t gid,
+ lttng::trace_format_descriptor::uptr& trace_format,
struct ltt_session **out_session)
{
int ret;
goto error;
}
}
- new_session = zmalloc<ltt_session>();
- if (!new_session) {
- PERROR("Failed to allocate an ltt_session structure");
+
+ try {
+ new_session = new ltt_session();
+ } catch (const std::exception& ex) {
+ ERR("Failed to create ltt_session: %s", ex.what());
ret_code = LTTNG_ERR_NOMEM;
goto error;
}
urcu_ref_init(&new_session->ref);
pthread_mutex_init(&new_session->lock, NULL);
+ new_session->trace_format = std::move(trace_format);
+
new_session->creation_time = time(NULL);
if (new_session->creation_time == (time_t) -1) {
PERROR("Failed to sample session creation time");