X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsession-rotation.c;h=3536f9602f6126a9bde6df18e8b9e24af6ba8bb2;hb=b0563feda603e2f21fb331adb4994edf4080f891;hp=f8d4439de06056296e1a2bc269bc37b6b0385c22;hpb=e5b7dd9f4db51ccf2a42bb32a9afd750841237a9;p=lttng-tools.git diff --git a/src/common/session-rotation.c b/src/common/session-rotation.c index f8d4439de..3536f9602 100644 --- a/src/common/session-rotation.c +++ b/src/common/session-rotation.c @@ -334,6 +334,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; } @@ -377,11 +380,12 @@ ssize_t create_evaluation_from_buffer( 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; } @@ -536,7 +540,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); } @@ -559,6 +563,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,