diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-03-22 14:25:34 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-07-18 11:23:45 -0400 |
commit | 1047e7dcb05cbf4c98276d00c157cf0506b451d5 (patch) | |
tree | caa1da14b4e00506d682c2f9a156f8325c76bace /src/or/relay.c | |
parent | 27ec1fafe4a739429ac82d47015465bb5a2d9674 (diff) | |
download | tor-1047e7dcb05cbf4c98276d00c157cf0506b451d5.tar.gz tor-1047e7dcb05cbf4c98276d00c157cf0506b451d5.zip |
Use TOR_SIMPLEQ for packed_cell_t
Diffstat (limited to 'src/or/relay.c')
-rw-r--r-- | src/or/relay.c | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/or/relay.c b/src/or/relay.c index 7ec7e03024..81132a131e 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -2129,7 +2129,6 @@ packed_cell_copy(const cell_t *cell, int wide_circ_ids) { packed_cell_t *c = packed_cell_new(); cell_pack(c, cell, wide_circ_ids); - c->next = NULL; return c; } @@ -2137,14 +2136,7 @@ packed_cell_copy(const cell_t *cell, int wide_circ_ids) void cell_queue_append(cell_queue_t *queue, packed_cell_t *cell) { - if (queue->tail) { - tor_assert(!queue->tail->next); - queue->tail->next = cell; - } else { - queue->head = cell; - } - queue->tail = cell; - cell->next = NULL; + TOR_SIMPLEQ_INSERT_TAIL(&queue->head, cell, next); ++queue->n; } @@ -2187,18 +2179,24 @@ cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell, cell_queue_append(queue, copy); } +/** Initialize <b>queue</b> as an empty cell queue. */ +void +cell_queue_init(cell_queue_t *queue) +{ + memset(queue, 0, sizeof(cell_queue_t)); + TOR_SIMPLEQ_INIT(&queue->head); +} + /** Remove and free every cell in <b>queue</b>. */ void cell_queue_clear(cell_queue_t *queue) { - packed_cell_t *cell, *next; - cell = queue->head; - while (cell) { - next = cell->next; + packed_cell_t *cell; + while ((cell = TOR_SIMPLEQ_FIRST(&queue->head))) { + TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next); packed_cell_free_unchecked(cell); - cell = next; } - queue->head = queue->tail = NULL; + TOR_SIMPLEQ_INIT(&queue->head); queue->n = 0; if (queue->insertion_times) { while (queue->insertion_times->first) { @@ -2215,14 +2213,10 @@ cell_queue_clear(cell_queue_t *queue) static INLINE packed_cell_t * cell_queue_pop(cell_queue_t *queue) { - packed_cell_t *cell = queue->head; + packed_cell_t *cell = TOR_SIMPLEQ_FIRST(&queue->head); if (!cell) return NULL; - queue->head = cell->next; - if (cell == queue->tail) { - tor_assert(!queue->head); - queue->tail = NULL; - } + TOR_SIMPLEQ_REMOVE_HEAD(&queue->head, next); --queue->n; return cell; } |