summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug237534
-rw-r--r--src/or/scheduler.c2
-rw-r--r--src/or/scheduler_kist.c8
3 files changed, 9 insertions, 5 deletions
diff --git a/changes/bug23753 b/changes/bug23753
new file mode 100644
index 0000000000..8782a8e2d0
--- /dev/null
+++ b/changes/bug23753
@@ -0,0 +1,4 @@
+ o Minor features (logging, scheduler):
+ - Introduce a SCHED_BUG() function to log extra information about the
+ scheduler state if we ever catch a bug in the scheduler. Closes ticket
+ 23753.
diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index c656c80e9c..67911ff81e 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -607,7 +607,7 @@ scheduler_release_channel,(channel_t *chan))
}
if (chan->scheduler_state == SCHED_CHAN_PENDING) {
- if (smartlist_pos(channels_pending, chan) == -1) {
+ if (SCHED_BUG(smartlist_pos(channels_pending, chan) == -1, chan)) {
log_warn(LD_SCHED, "Scheduler asked to release channel %" PRIu64 " "
"but it wasn't in channels_pending",
chan->global_identifier);
diff --git a/src/or/scheduler_kist.c b/src/or/scheduler_kist.c
index d269fb49b8..ea6910c702 100644
--- a/src/or/scheduler_kist.c
+++ b/src/or/scheduler_kist.c
@@ -116,7 +116,7 @@ channel_outbuf_length(channel_t *chan)
/* In theory, this can not happen because we can not scheduler a channel
* without a connection that has its outbuf initialized. Just in case, bug
* on this so we can understand a bit more why it happened. */
- if (BUG(BASE_CHAN_TO_TLS(chan)->conn == NULL)) {
+ if (SCHED_BUG(BASE_CHAN_TO_TLS(chan)->conn == NULL, chan)) {
return 0;
}
return buf_datalen(TO_CONN(BASE_CHAN_TO_TLS(chan)->conn)->outbuf);
@@ -370,7 +370,7 @@ socket_can_write(socket_table_t *table, const channel_t *chan)
{
socket_table_ent_t *ent = NULL;
ent = socket_table_search(table, chan);
- IF_BUG_ONCE(!ent) {
+ if (SCHED_BUG(!ent, chan)) {
return 1; // Just return true, saying that kist wouldn't limit the socket
}
@@ -390,7 +390,7 @@ update_socket_info(socket_table_t *table, const channel_t *chan)
{
socket_table_ent_t *ent = NULL;
ent = socket_table_search(table, chan);
- IF_BUG_ONCE(!ent) {
+ if (SCHED_BUG(!ent, chan)) {
return; // Whelp. Entry didn't exist for some reason so nothing to do.
}
update_socket_info_impl(ent);
@@ -402,7 +402,7 @@ update_socket_written(socket_table_t *table, channel_t *chan, size_t bytes)
{
socket_table_ent_t *ent = NULL;
ent = socket_table_search(table, chan);
- IF_BUG_ONCE(!ent) {
+ if (SCHED_BUG(!ent, chan)) {
return; // Whelp. Entry didn't exist so nothing to do.
}