--- a/motion.c +++ b/motion.c @@ -2630,6 +2630,17 @@ int main (int argc, char **argv) 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); + motion_startup(1, argc, argv); #ifdef HAVE_FFMPEG @@ -2648,17 +2659,6 @@ int main (int argc, char **argv) if (cnt_list[0]->conf.setup_mode) MOTION_LOG(NTC, TYPE_ALL, NO_ERRNO, "%s: 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) { /* --- a/motion.h +++ b/motion.h @@ -84,7 +84,7 @@ #endif /* strerror_r() XSI vs GNU */ -#if (defined(BSD)) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE) +#if (defined(BSD)) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE) || (!defined(__GLIBC__)) #define XSI_STRERROR_R #endif