Genericize the rand code.

This commit is contained in:
Ian Gulliver
2016-02-21 15:56:07 -08:00
parent 6384e0f20d
commit 835a144d6e
3 changed files with 21 additions and 9 deletions

View File

@@ -102,7 +102,7 @@ int main(int argc, char *argv[]) {
hex_init(); hex_init();
peer_init(); peer_init();
retry_init(); rand_init();
wakeup_init(); wakeup_init();
send_init(); send_init();
@@ -117,7 +117,7 @@ int main(int argc, char *argv[]) {
peer_loop(); peer_loop();
retry_cleanup(); rand_cleanup();
wakeup_cleanup(); wakeup_cleanup();
send_cleanup(); send_cleanup();

View File

@@ -218,17 +218,22 @@ void uuid_gen(char *out) {
} }
static int retry_rand_fd; static int rand_fd;
void retry_init() { void rand_init() {
retry_rand_fd = open("/dev/urandom", O_RDONLY); rand_fd = open("/dev/urandom", O_RDONLY);
assert(retry_rand_fd >= 0); assert(rand_fd >= 0);
} }
void retry_cleanup() { void rand_cleanup() {
assert(!close(retry_rand_fd)); assert(!close(rand_fd));
} }
void rand_fill(void *value, size_t size) {
assert(read(rand_fd, value, size) == size);
}
#define RETRY_MIN_MS 2000 #define RETRY_MIN_MS 2000
#define RETRY_MAX_MS 64000 #define RETRY_MAX_MS 64000
#define RETRY_MULT 2 #define RETRY_MULT 2
@@ -240,7 +245,7 @@ uint32_t retry_get_delay_ms(uint32_t prev_delay) {
uint32_t max_jitter = delay / RETRY_MAX_JITTER_DIV; uint32_t max_jitter = delay / RETRY_MAX_JITTER_DIV;
uint32_t jitter; uint32_t jitter;
assert(read(retry_rand_fd, &jitter, sizeof(jitter)) == sizeof(jitter)); rand_fill(&jitter, sizeof(jitter));
delay += jitter % max_jitter; delay += jitter % max_jitter;
delay = delay > RETRY_MAX_MS ? RETRY_MAX_MS : delay; delay = delay > RETRY_MAX_MS ? RETRY_MAX_MS : delay;

View File

@@ -93,6 +93,13 @@ void hex_from_int(char *, uint64_t, size_t);
void uuid_gen(char *); void uuid_gen(char *);
///////// rand
void rand_init();
void rand_cleanup();
void rand_fill(void *, size_t);
///////// retry timing ///////// retry timing
void retry_init(); void retry_init();