summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4a9b975)
Track whether a session was cleared after the last stop, so
additional clear will be effect-less until it is started again.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Icaa86acab20081b436bd55d026ec79a10c56034b
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
struct ltt_ust_session *usess;
const bool session_rotated_after_last_stop =
session->rotated_after_last_stop;
struct ltt_ust_session *usess;
const bool session_rotated_after_last_stop =
session->rotated_after_last_stop;
+ const bool session_cleared_after_last_stop =
+ session->cleared_after_last_stop;
session->active = 1;
session->rotated_after_last_stop = false;
session->active = 1;
session->rotated_after_last_stop = false;
+ session->cleared_after_last_stop = false;
if (session->output_traces && !session->current_trace_chunk) {
if (!session->has_been_started) {
struct lttng_trace_chunk *trace_chunk;
if (session->output_traces && !session->current_trace_chunk) {
if (!session->has_been_started) {
struct lttng_trace_chunk *trace_chunk;
/* Restore initial state on error. */
session->rotated_after_last_stop =
session_rotated_after_last_stop;
/* Restore initial state on error. */
session->rotated_after_last_stop =
session_rotated_after_last_stop;
+ session->cleared_after_last_stop =
+ session_cleared_after_last_stop;
cmd_ret = LTTNG_ERR_ROTATION_MULTIPLE_AFTER_STOP;
goto end;
}
cmd_ret = LTTNG_ERR_ROTATION_MULTIPLE_AFTER_STOP;
goto end;
}
+
+ /*
+ * After a stop followed by a clear, disallow following rotations a they would
+ * generate empty chunks.
+ */
+ if (session->cleared_after_last_stop) {
+ DBG("Session \"%s\" was already cleared after stop, refusing rotation",
+ session->name);
+ cmd_ret = LTTNG_ERR_ROTATION_AFTER_STOP_CLEAR;
+ goto end;
+ }
+
if (session->active) {
new_trace_chunk = session_create_new_trace_chunk(session, NULL,
NULL, NULL);
if (session->active) {
new_trace_chunk = session_create_new_trace_chunk(session, NULL,
NULL, NULL);
* chunk.
*/
bool rotated_after_last_stop;
* chunk.
*/
bool rotated_after_last_stop;
+ /*
+ * Track whether the session was cleared after last stop. All subsequent
+ * clear (without prior start) will succeed, but will be effect-less. A
+ * subsequent rotate (without prior start) will return an error.
+ */
+ bool cleared_after_last_stop;
/*
* Condition and trigger for size-based rotations.
*/
/*
* Condition and trigger for size-based rotations.
*/