X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=main.cpp;h=79d98394eed49c56dc37b5a7812b039250f60233;hp=4853518a4b25fd5917e1384a263b38b31a8824f9;hb=156897c8a6c7b86cb244d74911528de5c28f2134;hpb=733fa6455f39af91b105b82968f88a0165a66f08 diff --git a/main.cpp b/main.cpp index 4853518..79d9839 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; @@ -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);