diff --git a/changes/bug4655 b/changes/bug4655 new file mode 100644 index 0000000000000000000000000000000000000000..b91d87123c764bea94d3f12f43b723bf2d76aaea --- /dev/null +++ b/changes/bug4655 @@ -0,0 +1,10 @@ + o Minor bugfixes: + + - If we can't attach streams to a rendezvous circuit when we + finish connecting to a hidden service, clear the rendezvous + circuit's stream-isolation state and try to attach streams + again. Previously, we cleared rendezvous circuits' isolation + state either too early (if they were freshly built) or not at + all (if they had been built earlier and were cannibalized). + Bugfix on 0.2.3.3-alpha; fixes bug 4655. + diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 5429b6c7e3f577b4c8f91eaa6ac6ab3dfc7a98d2..c4744731dfbe3c62f892d6ef033cc196c69a8aca 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -892,10 +892,12 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request, onion_append_to_cpath(&circ->cpath, hop); circ->build_state->pending_final_cpath = NULL; /* prevent double-free */ + /* XXXX023 This is a pretty brute-force approach. It'd be better to * attach only the connections that are waiting on this circuit, rather * than trying to attach them all. See comments bug 743. */ - connection_ap_attach_pending(); + circuit_try_attaching_streams(circ); + memset(keys, 0, sizeof(keys)); return 0; err: