X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=main.cpp;h=69f0e9b7cb686b19293a4aef184e6b54941584b7;hp=4853518a4b25fd5917e1384a263b38b31a8824f9;hb=99738bd173040bf4e2d2d42ffc8c7ab8c105cf75;hpb=733fa6455f39af91b105b82968f88a0165a66f08 diff --git a/main.cpp b/main.cpp index 4853518..69f0e9b 100644 --- a/main.cpp +++ b/main.cpp @@ -130,6 +130,29 @@ MarkPool *get_mark_pool(map, MarkPool *> *mark_pools, int from, i mark_pools->insert(make_pair(mark_range, mark_pool)); return mark_pool; } + +MarkPool *parse_mark_pool(map, MarkPool *> *mark_pools, const string &mark_str) +{ + size_t split = mark_str.find_first_of('-'); + if (split == string::npos) { + fprintf(stderr, "WARNING: Invalid mark specification '%s' (expected 'X-Y'), ignoring.\n", + mark_str.c_str()); + return NULL; + } + + string from_str(mark_str.begin(), mark_str.begin() + split); + string to_str(mark_str.begin() + split + 1, mark_str.end()); + int from = atoi(from_str.c_str()); + int to = atoi(to_str.c_str()); + + if (from <= 0 || from >= 65536 || to <= 0 || to >= 65536) { + fprintf(stderr, "WARNING: Mark pool range %d-%d is outside legal range [1,65536>, ignoring.\n", + from, to); + return NULL; + } + + return get_mark_pool(mark_pools, from, to); +} int main(int argc, char **argv) { @@ -199,26 +222,7 @@ int main(int argc, char **argv) // Set up marks, if so desired. if (config[i].parameters.count("mark")) { - string mark_str = config[i].parameters["mark"]; - size_t split = mark_str.find_first_of('-'); - if (split == string::npos) { - fprintf(stderr, "WARNING: Invalid mark specification '%s' (expected 'X-Y'), ignoring.\n", - mark_str.c_str()); - continue; - } - - string from_str(mark_str.begin(), mark_str.begin() + split); - string to_str(mark_str.begin() + split + 1, mark_str.end()); - int from = atoi(from_str.c_str()); - int to = atoi(to_str.c_str()); - - if (from <= 0 || from >= 65536 || to <= 0 || to >= 65536) { - fprintf(stderr, "WARNING: Mark pool range %d-%d is outside legal range [1,65536>, ignoring.\n", - from, to); - continue; - } - - MarkPool *mark_pool = get_mark_pool(&mark_pools, from, to); + MarkPool *mark_pool = parse_mark_pool(&mark_pools, config[i].parameters["mark"]); servers->set_mark_pool(stream_id, mark_pool); } } @@ -261,8 +265,8 @@ int main(int argc, char **argv) servers->run(); - pthread_t acceptor_thread; - pthread_create(&acceptor_thread, NULL, acceptor_thread_run, reinterpret_cast(server_sock)); + AcceptorThread acceptor_thread(server_sock); + acceptor_thread.run(); // Find all streams in the configuration file, and create inputs for them. vector inputs; @@ -298,6 +302,9 @@ int main(int argc, char **argv) inputs.push_back(input); } + // All deserialized inputs should now have been taken care of, one way or the other. + assert(deserialized_inputs.empty()); + if (is_reexec) { // Put back the existing clients. It doesn't matter which server we // allocate them to, so just do round-robin. However, we need to add @@ -307,9 +314,6 @@ int main(int argc, char **argv) } } - // All deserialized inputs should now have been taken care of, one way or the other. - assert(deserialized_inputs.empty()); - // Start writing statistics. if (stats_thread != NULL) { stats_thread->run(); @@ -338,11 +342,7 @@ int main(int argc, char **argv) if (stats_thread != NULL) { stats_thread->stop(); } - pthread_kill(acceptor_thread, SIGHUP); - if (pthread_join(acceptor_thread, NULL) == -1) { - perror("pthread_join"); - exit(1); - } + acceptor_thread.stop(); CubemapStateProto state; state.set_serialize_start_sec(serialize_start.tv_sec);