Describe the recent timeouts reallocation behavior.

This commit is contained in:
Mike Perry 2010-02-10 12:25:06 -08:00
parent 2258125e1a
commit 2b95d1c0ee

View File

@ -135,6 +135,12 @@ circuit_build_times_recent_circuit_count(void)
return num; return num;
} }
/**
* This function is called when we get a consensus update.
*
* It checks to see if we have changed any consensus parameters
* that require reallocation or discard of previous stats.
*/
void void
circuit_build_times_new_consensus_params(circuit_build_times_t *cbt, circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
networkstatus_t *ns) networkstatus_t *ns)
@ -149,6 +155,19 @@ circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
tor_assert(num > 0); tor_assert(num > 0);
tor_assert(cbt->liveness.timeouts_after_firsthop); tor_assert(cbt->liveness.timeouts_after_firsthop);
/*
* Technically this is a circular array that we are reallocating
* and memcopying. However, since it only consists of either 1s
* or 0s, and is only used in a statistical test to determine when
* we should discard our history after a sufficient number of 1's
* have been reached, it is fine if order is not preserved or
* elements are lost.
*
* cbtrecentcount should only be changing in cases of severe network
* distress anyway, so memory correctness here is paramount over
* doing acrobatics to preserve the array.
*/
recent_circs = tor_malloc_zero(sizeof(int8_t)*num); recent_circs = tor_malloc_zero(sizeof(int8_t)*num);
memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop, memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs)); sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs));