return ret;
}
+/*
+ * Process the rotate_timer, called with session lock held.
+ */
+static
+int rotate_timer(struct ltt_session *session)
+{
+ int ret;
+
+ /*
+ * Complete _at most_ one scheduled rotation on a stopped session.
+ */
+ if (!session->active && session->rotate_timer_enabled &&
+ session->rotated_after_last_stop) {
+ ret = 0;
+ goto end;
+ }
+
+ /* Ignore this timer if a rotation is already in progress. */
+ if (session->rotate_pending || session->rotate_pending_relay) {
+ ret = 0;
+ goto end;
+ }
+
+ DBG("[rotation-thread] Rotate timer on session %s", session->name);
+
+ ret = cmd_rotate_session(session, NULL);
+ if (ret == -LTTNG_ERR_ROTATION_PENDING) {
+ DBG("Scheduled rotation aborted since a rotation is already in progress");
+ ret = 0;
+ goto end;
+ } else if (ret != LTTNG_OK) {
+ ERR("[rotation-thread] Automatic time-triggered rotation failed with error code %i", ret);
+ ret = -1;
+ goto end;
+ }
+
+ ret = 0;
+
+end:
+ return ret;
+}
+
static
int handle_rotate_timer_pipe(uint32_t revents,
struct rotation_thread_handle *handle,
if (timer_data->signal == LTTNG_SESSIOND_SIG_ROTATE_PENDING) {
ret = rotate_pending_relay_timer(session);
+ } else if (timer_data->signal == LTTNG_SESSIOND_SIG_ROTATE_TIMER) {
+ ret = rotate_timer(session);
} else {
ERR("Unknown signal in rotate timer %d", timer_data->signal);
ret = -1;