Clean-up: sessiond: automatic memory management of ltt_ust_event
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 22 Jul 2024 19:16:27 +0000 (19:16 +0000)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 30 Jul 2024 01:26:51 +0000 (01:26 +0000)
Simplify trace_ust_create_event by wrapping the created ltt_ust_event
in a unique_ptr until it is returned (on success).

Change-Id: I1b14df589f30d4cd19c9712b70f6c5656335123b
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/trace-ust.cpp
src/bin/lttng-sessiond/trace-ust.hpp

index 4d15bd7589f673a8dfc9b10b24f155b41a0e18fb..8937dd2056d87a13e917ac63692a1d73ae92a4b9 100644 (file)
@@ -449,8 +449,8 @@ enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
                                             bool internal_event,
                                             struct ltt_ust_event **ust_event)
 {
-       struct ltt_ust_event *local_ust_event;
        enum lttng_error_code ret = LTTNG_OK;
+       std::unique_ptr<ltt_ust_event> local_ust_event;
 
        LTTNG_ASSERT(ev);
 
@@ -459,9 +459,10 @@ enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
                goto error;
        }
 
-       local_ust_event = zmalloc<ltt_ust_event>();
-       if (local_ust_event == nullptr) {
-               PERROR("ust event zmalloc");
+       try {
+               local_ust_event = lttng::make_unique<ltt_ust_event>();
+       } catch (const std::bad_alloc &ex) {
+               ERR_FMT("Failed to allocate ltt_ust_event");
                ret = LTTNG_ERR_NOMEM;
                goto error;
        }
@@ -484,7 +485,7 @@ enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
        default:
                ERR("Unknown ust instrumentation type (%d)", ev->type);
                ret = LTTNG_ERR_INVALID;
-               goto error_free_event;
+               goto error;
        }
 
        /* Copy event name */
@@ -507,7 +508,7 @@ enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
        default:
                ERR("Unknown ust loglevel type (%d)", ev->loglevel_type);
                ret = LTTNG_ERR_INVALID;
-               goto error_free_event;
+               goto error;
        }
 
        /* Same layout. */
@@ -523,12 +524,10 @@ enum lttng_error_code trace_ust_create_event(struct lttng_event *ev,
             local_ust_event->attr.loglevel_type,
             local_ust_event->attr.loglevel);
 
-       *ust_event = local_ust_event;
+       *ust_event = local_ust_event.release();
 
        return ret;
 
-error_free_event:
-       free(local_ust_event);
 error:
        free(filter_expression);
        free(filter);
@@ -1231,7 +1230,7 @@ void trace_ust_destroy_event(struct ltt_ust_event *event)
        free(event->filter_expression);
        free(event->filter);
        free(event->exclusion);
-       free(event);
+       delete event;
 }
 
 /*
index ea84722f1dbe407ff0777c1335bd8e1670de9330..7788707175bd0748c9bb261b5745b9936bf5dee7 100644 (file)
@@ -40,19 +40,19 @@ struct ltt_ust_context {
 
 /* UST event */
 struct ltt_ust_event {
-       bool enabled;
-       struct lttng_ust_abi_event attr;
-       struct lttng_ht_node_str node;
-       char *filter_expression;
-       struct lttng_bytecode *filter;
-       struct lttng_event_exclusion *exclusion;
+       bool enabled = false;
+       struct lttng_ust_abi_event attr = {};
+       struct lttng_ht_node_str node = {};
+       char *filter_expression = nullptr;
+       struct lttng_bytecode *filter = nullptr;
+       struct lttng_event_exclusion *exclusion = nullptr;
        /*
         * An internal event is an event which was created by the session daemon
         * through which, for example, events emitted in Agent domains are
         * "funelled". This is used to hide internal events from external
         * clients as they should never be modified by the external world.
         */
-       bool internal;
+       bool internal = false;
 };
 
 /* UST channel */
This page took 0.027671 seconds and 4 git commands to generate.