aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/circuitpadding.h
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2020-06-08 19:18:51 -0500
committerGeorge Kadianakis <desnacked@riseup.net>2020-06-10 15:37:44 +0300
commit0a4bc8fe90c110798948d5e05d436d5e3c1fdae6 (patch)
tree43b87ea3d6e6157a0efd856a1448ef06cd3177e1 /src/core/or/circuitpadding.h
parent9eb0eeb68e524b03924ea9b1f11e9b75fcdcf37b (diff)
downloadtor-0a4bc8fe90c110798948d5e05d436d5e3c1fdae6.tar.gz
tor-0a4bc8fe90c110798948d5e05d436d5e3c1fdae6.zip
Bug 30992: Track a padding machine ctr to reduce race issues.
This tracking of the instantiation count should eliminate race conditions due to starting and stopping machines rapidly. Now, we should no longer obey STOP commands for previous machines.
Diffstat (limited to 'src/core/or/circuitpadding.h')
-rw-r--r--src/core/or/circuitpadding.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/or/circuitpadding.h b/src/core/or/circuitpadding.h
index 74b69a1c7a..4fadcb742a 100644
--- a/src/core/or/circuitpadding.h
+++ b/src/core/or/circuitpadding.h
@@ -565,6 +565,13 @@ typedef struct circpad_machine_runtime_t {
/** What state is this machine in? */
circpad_statenum_t current_state;
+ /** Machine counter, for shutdown sync.
+ *
+ * Set from circuit_t.padding_machine_ctr, which is incremented each
+ * padding machine instantiation.
+ */
+ uint32_t machine_ctr;
+
/**
* True if we have scheduled a timer for padding.
*
@@ -726,11 +733,13 @@ signed_error_t circpad_handle_padding_negotiated(struct circuit_t *circ,
signed_error_t circpad_negotiate_padding(struct origin_circuit_t *circ,
circpad_machine_num_t machine,
uint8_t target_hopnum,
- uint8_t command);
+ uint8_t command,
+ uint32_t machine_ctr);
bool circpad_padding_negotiated(struct circuit_t *circ,
circpad_machine_num_t machine,
uint8_t command,
- uint8_t response);
+ uint8_t response,
+ uint32_t machine_ctr);
circpad_purpose_mask_t circpad_circ_purpose_to_mask(uint8_t circ_purpose);