From 3c7cbd685017c1bf9ba2eaa811b63842bec28f64 Mon Sep 17 00:00:00 2001 From: Mr-DaveDev Date: Mon, 1 Jan 2018 13:07:08 -0700 Subject: [PATCH] Initialize the thread at start of main Closes #589 --- logger.c | 5 ----- motion.c | 30 ++++++++++++++++-------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/logger.c b/logger.c index c55044b..5ef2f85 100644 --- a/logger.c +++ b/logger.c @@ -193,11 +193,6 @@ void motion_log(int level, unsigned int type, int errno_flag, const char *fmt, . //printf("log_type %d, type %d level %d\n", log_type, type, level); - /* - * If pthread_getspecific fails (e.g., because the thread's TLS doesn't - * contain anything for thread number, it returns NULL which casts to zero, - * which is nice because that's what we want in that case. - */ threadnr = (unsigned long)pthread_getspecific(tls_key_threadnr); /* diff --git a/motion.c b/motion.c index 985d4b2..9fe58c1 100644 --- a/motion.c +++ b/motion.c @@ -2886,10 +2886,6 @@ static void motion_startup(int daemonize, int argc, char *argv[]) } - //set_log_level(cnt_list[0]->log_level); - - MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started"); - if ((cnt_list[0]->conf.log_file) && (strncmp(cnt_list[0]->conf.log_file, "syslog", 6))) { set_log_mode(LOGMODE_FILE); ptr_logfile = set_logfile(cnt_list[0]->conf.log_file); @@ -2908,6 +2904,8 @@ static void motion_startup(int daemonize, int argc, char *argv[]) MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Logging to syslog"); } + MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion "VERSION" Started"); + if ((cnt_list[0]->conf.log_type_str == NULL) || !(cnt_list[0]->log_type = get_log_type(cnt_list[0]->conf.log_type_str))) { cnt_list[0]->log_type = TYPE_DEFAULT; @@ -3053,8 +3051,22 @@ int main (int argc, char **argv) */ struct sigaction sig_handler_action; struct sigaction sigchild_action; + + setup_signals(&sig_handler_action, &sigchild_action); + /* + * Create and a thread attribute for the threads we spawn later on. + * PTHREAD_CREATE_DETACHED means to create threads detached, i.e. + * their termination cannot be synchronized through 'pthread_join'. + */ + pthread_attr_init(&thread_attr); + pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); + + /* Create the TLS key for thread number. */ + pthread_key_create(&tls_key_threadnr, NULL); + pthread_setspecific(tls_key_threadnr, (void *)(0)); + motion_startup(1, argc, argv); ffmpeg_global_init(); @@ -3102,16 +3114,6 @@ int main (int argc, char **argv) if (cnt_list[0]->conf.setup_mode) MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "Motion running in setup mode."); - /* - * Create and a thread attribute for the threads we spawn later on. - * PTHREAD_CREATE_DETACHED means to create threads detached, i.e. - * their termination cannot be synchronized through 'pthread_join'. - */ - pthread_attr_init(&thread_attr); - pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); - - /* Create the TLS key for thread number. */ - pthread_key_create(&tls_key_threadnr, NULL); do { if (restart) { -- 2.7.4