diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-10-25 12:25:41 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-10-25 12:25:41 -0400 |
commit | c7a1a987d6dfcb65a5fd639cc3d37b76809c37d5 (patch) | |
tree | c817ec6a66adeca56bf848ea77a695478e35ab3c /src/or/rendservice.c | |
parent | 55a3dad7083ae9931e9ca760fd6c27c5de3b8986 (diff) | |
parent | 9592797cf3291fceb7715164e519e02a744c2a25 (diff) | |
download | tor-c7a1a987d6dfcb65a5fd639cc3d37b76809c37d5.tar.gz tor-c7a1a987d6dfcb65a5fd639cc3d37b76809c37d5.zip |
Merge branch 'maint-0.3.2'
Diffstat (limited to 'src/or/rendservice.c')
-rw-r--r-- | src/or/rendservice.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 74646c78d1..60234a5c1f 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -475,6 +475,30 @@ rend_service_port_config_free(rend_service_port_config_t *p) tor_free(p); } +/* Copy relevant data from service src to dst while pruning the service lists. + * This should only be called during the pruning process which takes existing + * services and copy their data to the newly configured services. The src + * service replaycache will be set to NULL after this call. */ +static void +copy_service_on_prunning(rend_service_t *dst, rend_service_t *src) +{ + tor_assert(dst); + tor_assert(src); + + /* Keep the timestamps for when the content changed and the next upload + * time so we can properly upload the descriptor if needed for the new + * service object. */ + dst->desc_is_dirty = src->desc_is_dirty; + dst->next_upload_time = src->next_upload_time; + /* Move the replaycache to the new object. */ + dst->accepted_intro_dh_parts = src->accepted_intro_dh_parts; + src->accepted_intro_dh_parts = NULL; + /* Copy intro point information to destination service. */ + dst->intro_period_started = src->intro_period_started; + dst->n_intro_circuits_launched = src->n_intro_circuits_launched; + dst->n_intro_points_wanted = src->n_intro_points_wanted; +} + /* Helper: Actual implementation of the pruning on reload which we've * decoupled in order to make the unit test workeable without ugly hacks. * Furthermore, this function does NOT free any memory but will nullify the @@ -548,6 +572,10 @@ rend_service_prune_list_impl_(void) smartlist_clear(old->intro_nodes); smartlist_add_all(new->expiring_nodes, old->expiring_nodes); smartlist_clear(old->expiring_nodes); + + /* Copy needed information from old to new. */ + copy_service_on_prunning(new, old); + /* This regular service will survive the closing IPs step after. */ smartlist_add(surviving_services, old); break; |