From 7672c4bac0b8be5b8c5760877c660a2ce9cd1933 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 11 Apr 2013 00:21:09 +0200 Subject: [PATCH] Factor serializing into its own function. Again, less stuff in main(). --- main.cpp | 58 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/main.cpp b/main.cpp index de3900b..1979bb3 100644 --- a/main.cpp +++ b/main.cpp @@ -68,6 +68,38 @@ int make_tempfile(const CubemapStateProto &state) return state_fd; } +CubemapStateProto collect_state(const timeval &serialize_start, + int server_sock, + int port, + const vector inputs, + ServerPool *servers, + int num_servers) +{ + CubemapStateProto state; + state.set_serialize_start_sec(serialize_start.tv_sec); + state.set_serialize_start_usec(serialize_start.tv_usec); + state.set_server_sock(server_sock); + state.set_port(port); + + for (size_t i = 0; i < inputs.size(); ++i) { + state.add_inputs()->MergeFrom(inputs[i]->serialize()); + } + + for (int i = 0; i < num_servers; ++i) { + CubemapStateProto local_state = servers->get_server(i)->serialize(); + + // The stream state should be identical between the servers, so we only store it once. + if (i == 0) { + state.mutable_streams()->MergeFrom(local_state.streams()); + } + for (int j = 0; j < local_state.clients_size(); ++j) { + state.add_clients()->MergeFrom(local_state.clients(j)); + } + } + + return state; +} + // Read the state back from the file descriptor made by make_tempfile, // and close it. CubemapStateProto read_tempfile(int state_fd) @@ -361,36 +393,18 @@ int main(int argc, char **argv) stats_thread->stop(); } acceptor_thread.stop(); - - CubemapStateProto state; - state.set_serialize_start_sec(serialize_start.tv_sec); - state.set_serialize_start_usec(serialize_start.tv_usec); - state.set_server_sock(server_sock); - state.set_port(port); - for (size_t i = 0; i < inputs.size(); ++i) { inputs[i]->stop(); - state.add_inputs()->MergeFrom(inputs[i]->serialize()); } - for (int i = 0; i < num_servers; ++i) { servers->get_server(i)->stop(); - - CubemapStateProto local_state = servers->get_server(i)->serialize(); - - // The stream state should be identical between the servers, so we only store it once. - if (i == 0) { - state.mutable_streams()->MergeFrom(local_state.streams()); - } - for (int j = 0; j < local_state.clients_size(); ++j) { - state.add_clients()->MergeFrom(local_state.clients(j)); - } } - delete servers; fprintf(stderr, "Serializing state and re-execing...\n"); - int state_fd = make_tempfile(state); - + int state_fd = make_tempfile(collect_state( + serialize_start, server_sock, port, inputs, servers, num_servers)); + delete servers; + char buf[16]; sprintf(buf, "%d", state_fd); -- 2.39.2