浏览代码

incomplete patch for matt's info controller signal term bug

svn:r4728
Roger Dingledine 19 年之前
父节点
当前提交
5c4da9dec6
共有 3 个文件被更改,包括 8 次插入4 次删除
  1. 4 0
      src/or/connection.c
  2. 3 4
      src/or/control.c
  3. 1 0
      src/or/or.h

+ 4 - 0
src/or/connection.c

@@ -253,6 +253,10 @@ connection_free(connection_t *conn)
     if (conn->state == OR_CONN_STATE_OPEN)
       directory_set_dirty();
   }
+  if (conn->type == CONN_TYPE_CONTROL) {
+    conn->event_mask = 0;
+    control_update_global_event_mask();
+  }
   connection_unregister(conn);
   _connection_free(conn);
 }

+ 3 - 4
src/or/control.c

@@ -127,7 +127,6 @@ static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
 
 static void connection_printf_to_buf(connection_t *conn, const char *format, ...)
   CHECK_PRINTF(2,3);
-static void update_global_event_mask(void);
 static void send_control0_message(connection_t *conn, uint16_t type,
                                  uint32_t len, const char *body);
 static void send_control_done(connection_t *conn);
@@ -204,8 +203,8 @@ log_severity_to_event(int severity)
 
 /** Set <b>global_event_mask</b> to the bitwise OR of each live control
  * connection's event_mask field. */
-static void
-update_global_event_mask(void)
+void
+control_update_global_event_mask(void)
 {
   connection_t **conns;
   int n_conns, i;
@@ -847,7 +846,7 @@ handle_control_setevents(connection_t *conn, uint32_t len, const char *body)
   }
   conn->event_mask = event_mask;
 
-  update_global_event_mask();
+  control_update_global_event_mask();
   send_control_done(conn);
   return 0;
 }

+ 1 - 0
src/or/or.h

@@ -1536,6 +1536,7 @@ typedef enum or_conn_status_event_t {
   OR_CONN_EVENT_CLOSED       = 3,
 } or_conn_status_event_t;
 
+void control_update_global_event_mask(void);
 void control_adjust_event_log_severity(void);
 void disable_control_logging(void);
 void enable_control_logging(void);