aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2022-09-04 03:55:27 -0400
committerMicah Elizabeth Scott <beth@torproject.org>2023-05-10 07:37:11 -0700
commiteba919093320a995a10637170fcc881a4c2c2dd9 (patch)
treed5a419042f28176e9d8d983f65f6d4168186ddc5 /src/core
parentaa41d4b9396ade02fa1b14a2aa0fa097e11e779d (diff)
downloadtor-eba919093320a995a10637170fcc881a4c2c2dd9.tar.gz
tor-eba919093320a995a10637170fcc881a4c2c2dd9.zip
compute the client-side pow in a cpuworker thread
We mark the intro circuit with a new flag saying that the pow is in the cpuworker queue. When the cpuworker comes back, it either has a solution, in which case we proceed with sending the intro1 cell, or it has no solution, in which case we unmark the intro circuit and let the whole process restart on the next iteration of connection_ap_handshake_attach_circuit().
Diffstat (limited to 'src/core')
-rw-r--r--src/core/mainloop/cpuworker.c3
-rw-r--r--src/core/or/circuituse.c4
-rw-r--r--src/core/or/origin_circuit_st.h4
3 files changed, 8 insertions, 3 deletions
diff --git a/src/core/mainloop/cpuworker.c b/src/core/mainloop/cpuworker.c
index 4a22790b44..a42dbb528d 100644
--- a/src/core/mainloop/cpuworker.c
+++ b/src/core/mainloop/cpuworker.c
@@ -14,7 +14,8 @@
* Right now, we use this infrastructure
* <ul><li>for processing onionskins in onion.c
* <li>for compressing consensuses in consdiffmgr.c,
- * <li>and for calculating diffs and compressing them in consdiffmgr.c.
+ * <li>for calculating diffs and compressing them in consdiffmgr.c.
+ * <li>and for solving onion service PoW challenges in pow.c.
* </ul>
**/
#include "core/or/or.h"
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index d5879a21eb..b78f72e835 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -3043,8 +3043,8 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
if (introcirc->base_.state == CIRCUIT_STATE_OPEN) {
int ret;
log_info(LD_REND, "Found open intro circ %u (id: %" PRIu32 "). "
- "Rend circuit %u (id: %" PRIu32 "); Sending "
- "introduction. (stream %d sec old)",
+ "Rend circuit %u (id: %" PRIu32 "); Considering "
+ "sending introduction. (stream %d sec old)",
(unsigned) TO_CIRCUIT(introcirc)->n_circ_id,
introcirc->global_identifier,
(unsigned) TO_CIRCUIT(rendcirc)->n_circ_id,
diff --git a/src/core/or/origin_circuit_st.h b/src/core/or/origin_circuit_st.h
index fd5424c450..3b3fcc9b42 100644
--- a/src/core/or/origin_circuit_st.h
+++ b/src/core/or/origin_circuit_st.h
@@ -218,6 +218,10 @@ struct origin_circuit_t {
* requests. */
unsigned int hs_with_pow_circ : 1;
+ /** Set iff this intro circ required a pow, and it has already queued
+ * the pow with the cpuworker and is awaiting a reply. */
+ unsigned int hs_currently_solving_pow : 1;
+
/** Set iff this circuit has been given a relaxed timeout because
* no circuits have opened. Used to prevent spamming logs. */
unsigned int relaxed_timeout : 1;