diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 1d51550f9f..42d9c9f081 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -198,6 +198,24 @@ get_scheduler_type_string(scheduler_types_t type) } } +/** Returns human readable string for the given channel scheduler state. */ +static const char * +get_scheduler_state_string(int scheduler_state) +{ + switch (scheduler_state) { + case SCHED_CHAN_IDLE: + return "IDLE"; + case SCHED_CHAN_WAITING_FOR_CELLS: + return "WAITING_FOR_CELLS"; + case SCHED_CHAN_WAITING_TO_WRITE: + return "WAITING_TO_WRITE"; + case SCHED_CHAN_PENDING: + return "PENDING"; + default: + return "(invalid)"; + } +} + /** * Scheduler event callback; this should get triggered once per event loop * if any scheduling work was created during the event loop. @@ -365,8 +383,10 @@ set_scheduler(void) /** Helper that logs channel scheduler_state changes. Use this instead of * setting scheduler_state directly. */ void scheduler_set_channel_state(channel_t *chan, int new_state){ - log_debug(LD_SCHED, "chan %s changed from scheduler state %d to %d", - chan->global_identifier, chan->scheduler_state, new_state); + log_debug(LD_SCHED, "chan %" PRIu64 " changed from scheduler state %s to %s", + chan->global_identifier, + get_scheduler_state_string(chan->scheduler_state), + get_scheduler_state_string(new_state)); chan->scheduler_state = new_state; }