[tor-commits] [tor/maint-0.3.2] sched: Use SCHED_BUG() macro in scheduler

nickm at torproject.org nickm at torproject.org
Thu Nov 2 14:32:24 UTC 2017


commit 3931a6f264355d7fe017219f76bd5bec1d8bcbd8
Author: David Goulet <dgoulet at torproject.org>
Date:   Tue Oct 3 14:38:30 2017 -0400

    sched: Use SCHED_BUG() macro in scheduler
    
    When a BUG() occurs, this macro will print extra information about the state
    of the scheduler and the given channel if any. This will help us greatly to
    fix future bugs in the scheduler especially when they occur rarely.
    
    Fixes #23753
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 changes/bug23753        | 4 ++++
 src/or/scheduler.c      | 2 +-
 src/or/scheduler_kist.c | 8 ++++----
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/changes/bug23753 b/changes/bug23753
new file mode 100644
index 000000000..8782a8e2d
--- /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 c656c80e9..67911ff81 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 d269fb49b..ea6910c70 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.
   }
 





More information about the tor-commits mailing list