common: replace container_of with a C++ safe implementation
[lttng-tools.git] / src / common / actions / snapshot-session.cpp
index 600d803e3610b1d065a23cbe82e7fc79e2151596..6af260c93e35a3e7cb2659429cd0a6f0f849bf53 100644 (file)
@@ -23,6 +23,7 @@
 #define IS_SNAPSHOT_SESSION_ACTION(action) \
        (lttng_action_get_type(action) == LTTNG_ACTION_TYPE_SNAPSHOT_SESSION)
 
+namespace {
 struct lttng_action_snapshot_session {
        struct lttng_action parent;
 
@@ -54,6 +55,7 @@ struct lttng_action_snapshot_session_comm {
         */
        char data[];
 } LTTNG_PACKED;
+} /* namespace */
 
 static const struct lttng_rate_policy *
 lttng_action_snapshot_session_internal_get_rate_policy(
@@ -64,8 +66,8 @@ action_snapshot_session_from_action(struct lttng_action *action)
 {
        LTTNG_ASSERT(action);
 
-       return container_of(
-                       action, struct lttng_action_snapshot_session, parent);
+       return lttng::utils::container_of(
+                       action, &lttng_action_snapshot_session::parent);
 }
 
 static const struct lttng_action_snapshot_session *
@@ -73,8 +75,8 @@ action_snapshot_session_from_action_const(const struct lttng_action *action)
 {
        LTTNG_ASSERT(action);
 
-       return container_of(
-                       action, struct lttng_action_snapshot_session, parent);
+       return lttng::utils::container_of(
+                       action, &lttng_action_snapshot_session::parent);
 }
 
 static bool lttng_action_snapshot_session_validate(struct lttng_action *action)
@@ -445,7 +447,7 @@ end:
 
 struct lttng_action *lttng_action_snapshot_session_create(void)
 {
-       struct lttng_action *action = NULL;
+       struct lttng_action_snapshot_session *action_snapshot = NULL;
        struct lttng_rate_policy *policy = NULL;
        enum lttng_action_status status;
 
@@ -455,12 +457,13 @@ struct lttng_action *lttng_action_snapshot_session_create(void)
                goto end;
        }
 
-       action = (lttng_action *) zmalloc(sizeof(struct lttng_action_snapshot_session));
-       if (!action) {
+       action_snapshot = zmalloc<lttng_action_snapshot_session>();
+       if (!action_snapshot) {
                goto end;
        }
 
-       lttng_action_init(action, LTTNG_ACTION_TYPE_SNAPSHOT_SESSION,
+       lttng_action_init(&action_snapshot->parent,
+                       LTTNG_ACTION_TYPE_SNAPSHOT_SESSION,
                        lttng_action_snapshot_session_validate,
                        lttng_action_snapshot_session_serialize,
                        lttng_action_snapshot_session_is_equal,
@@ -469,16 +472,17 @@ struct lttng_action *lttng_action_snapshot_session_create(void)
                        lttng_action_generic_add_error_query_results,
                        lttng_action_snapshot_session_mi_serialize);
 
-       status = lttng_action_snapshot_session_set_rate_policy(action, policy);
+       status = lttng_action_snapshot_session_set_rate_policy(
+                       &action_snapshot->parent, policy);
        if (status != LTTNG_ACTION_STATUS_OK) {
-               free(action);
-               action = NULL;
+               lttng_action_destroy(&action_snapshot->parent);
+               action_snapshot = NULL;
                goto end;
        }
 
 end:
        lttng_rate_policy_destroy(policy);
-       return action;
+       return action_snapshot ? &action_snapshot->parent : nullptr;
 }
 
 enum lttng_action_status lttng_action_snapshot_session_set_session_name(
This page took 0.029453 seconds and 4 git commands to generate.