X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconditions%2Fsession-rotation.c;h=e2a5adf2d40b74ba2b784b1c4e37ae7758073d7e;hb=a0377dfefe40662ba7d68617bce6ff467114136c;hp=1be0f0ad25c5f20b1c27028160b6d3ce231e79de;hpb=6a751b953a43c566b74818ec6325db0978e16c66;p=lttng-tools.git diff --git a/src/common/conditions/session-rotation.c b/src/common/conditions/session-rotation.c index 1be0f0ad2..e2a5adf2d 100644 --- a/src/common/conditions/session-rotation.c +++ b/src/common/conditions/session-rotation.c @@ -5,7 +5,6 @@ * */ -#include #include #include #include @@ -344,6 +343,9 @@ struct lttng_evaluation *lttng_evaluation_session_rotation_create( sizeof(evaluation->parent)); lttng_evaluation_init(&evaluation->parent, type); evaluation->id = id; + if (location) { + lttng_trace_archive_location_get(location); + } evaluation->location = location; return &evaluation->parent; } @@ -390,11 +392,12 @@ ssize_t create_evaluation_from_payload( goto error; } + lttng_trace_archive_location_put(location); ret = size; *_evaluation = evaluation; return ret; error: - lttng_trace_archive_location_destroy(location); + lttng_trace_archive_location_put(location); evaluation = NULL; return -1; } @@ -550,7 +553,7 @@ void lttng_evaluation_session_rotation_destroy( rotation = container_of(evaluation, struct lttng_evaluation_session_rotation, parent); - lttng_trace_archive_location_destroy(rotation->location); + lttng_trace_archive_location_put(rotation->location); free(rotation); } @@ -573,6 +576,12 @@ end: return status; } +/* + * The public API assumes that trace archive locations are always provided as + * "constant". This means that the user of liblttng-ctl never has to destroy a + * trace archive location. Hence, users of liblttng-ctl have no visibility of + * the reference counting of archive locations. + */ enum lttng_evaluation_status lttng_evaluation_session_rotation_completed_get_location( const struct lttng_evaluation *evaluation, @@ -605,9 +614,9 @@ enum lttng_error_code lttng_condition_session_rotation_mi_serialize( const char *session_name = NULL; const char *type_element_str = NULL; - assert(condition); - assert(writer); - assert(is_rotation_condition(condition)); + LTTNG_ASSERT(condition); + LTTNG_ASSERT(writer); + LTTNG_ASSERT(is_rotation_condition(condition)); switch (lttng_condition_get_type(condition)) { case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED: @@ -625,8 +634,8 @@ enum lttng_error_code lttng_condition_session_rotation_mi_serialize( status = lttng_condition_session_rotation_get_session_name( condition, &session_name); - assert(status == LTTNG_CONDITION_STATUS_OK); - assert(session_name); + LTTNG_ASSERT(status == LTTNG_CONDITION_STATUS_OK); + LTTNG_ASSERT(session_name); /* Open condition session rotation_* element. */ ret = mi_lttng_writer_open_element(writer, type_element_str);