]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Refactor OOM-handling functions for more testability
authorNick Mathewson <nickm@torproject.org>
Mon, 13 Jan 2014 14:52:07 +0000 (09:52 -0500)
committerNick Mathewson <nickm@torproject.org>
Wed, 12 Feb 2014 17:48:20 +0000 (12:48 -0500)
This patch splits out some of the functions in OOM handling so that
it's easier to check them without involving the rest of Tor or
requiring that the circuits be "wired up".

src/or/circuitlist.c
src/or/circuitlist.h
src/or/relay.c
src/or/relay.h

index eb652301edfbc8b6a3776833bd9efeba2fb8bfc5..618a42ed36c1fded002a439c42bdc8ba50c06c7a 100644 (file)
@@ -1435,9 +1435,9 @@ circuit_mark_all_dirty_circs_as_unusable(void)
  *   - If circ->rend_splice is set (we are the midpoint of a joined
  *     rendezvous stream), then mark the other circuit to close as well.
  */
-void
-circuit_mark_for_close_(circuit_t *circ, int reason, int line,
-                        const char *file)
+MOCK_IMPL(void,
+circuit_mark_for_close_(circuit_t *circ, int reason, int line,
+                          const char *file))
 {
   int orig_reason = reason; /* Passed to the controller */
   assert_circuit_ok(circ);
index 1c8cf7de24ab62590edb154cf47fa577aef1f7cc..a6340c1f7a82ffddf8149e9cffe3f22dd08efc52 100644 (file)
@@ -53,8 +53,8 @@ origin_circuit_t *circuit_find_to_cannibalize(uint8_t purpose,
                                               extend_info_t *info, int flags);
 void circuit_mark_all_unused_circs(void);
 void circuit_mark_all_dirty_circs_as_unusable(void);
-void circuit_mark_for_close_(circuit_t *circ, int reason,
-                             int line, const char *file);
+MOCK_DECL(void, circuit_mark_for_close_, (circuit_t *circ, int reason,
+                                          int line, const char *file));
 int circuit_get_cpath_len(origin_circuit_t *circ);
 void circuit_clear_cpath(origin_circuit_t *circ);
 crypt_path_t *circuit_get_cpath_hop(origin_circuit_t *circ, int hopnum);
index 041a9e8b5cee9ea17c1d643e77a7e9cf5cd65f73..dbc171059471b2d80a6c76a1ca51ea10dd2a60c3 100644 (file)
@@ -2199,12 +2199,19 @@ packed_cell_mem_cost(void)
   return sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD;
 }
 
+/** DOCDOC */
+STATIC size_t
+cell_queues_get_total_allocation(void)
+{
+  return total_cells_allocated * packed_cell_mem_cost();
+}
+
 /** Check whether we've got too much space used for cells.  If so,
  * call the OOM handler and return 1.  Otherwise, return 0. */
-static int
+STATIC int
 cell_queues_check_size(void)
 {
-  size_t alloc = total_cells_allocated * packed_cell_mem_cost();
+  size_t alloc = cell_queues_get_total_allocation();
   alloc += buf_get_total_allocation();
   if (alloc >= get_options()->MaxMemInQueues) {
     circuits_handle_oom(alloc);
index 20eecfb4001046930a6d1d09a7381466cde8ddf5..2c7d0d8ae4ac64c4a3f7dd10eec1dd7803aa6094 100644 (file)
@@ -85,6 +85,8 @@ STATIC int connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
                          tor_addr_t *addr_out, int *ttl_out);
 STATIC packed_cell_t *packed_cell_new(void);
 STATIC packed_cell_t *cell_queue_pop(cell_queue_t *queue);
+STATIC size_t cell_queues_get_total_allocation(void);
+STATIC int cell_queues_check_size(void);
 #endif
 
 #endif