/* Thread: main */ int library_init(void) { int i; int ret; scan_exit = false; scanning = false; CHECK_NULL(L_LIB, evbase_lib = event_base_new()); CHECK_NULL(L_LIB, updateev = evtimer_new(evbase_lib, update_trigger_cb, NULL)); for (i = 0; sources[i]; i++) { if (!sources[i]->init) continue; ret = sources[i]->init(); if (ret < 0) sources[i]->disabled = 1; } CHECK_NULL(L_LIB, cmdbase = commands_base_new(evbase_lib, NULL)); CHECK_ERR(L_LIB, pthread_create(&tid_library, NULL, library, NULL)); #if defined(HAVE_PTHREAD_SETNAME_NP) pthread_setname_np(tid_library, "library"); #elif defined(HAVE_PTHREAD_SET_NAME_NP) pthread_set_name_np(tid_library, "library"); #endif return 0; }
/* Thread: main */ int filescanner_init(void) { int ret; scan_exit = 0; scanning = 0; evbase_scan = event_base_new(); if (!evbase_scan) { DPRINTF(E_FATAL, L_SCAN, "Could not create an event base\n"); return -1; } ret = inofd_event_set(); if (ret < 0) { goto ino_fail; } cmdbase = commands_base_new(evbase_scan, NULL); ret = pthread_create(&tid_scan, NULL, filescanner, NULL); if (ret != 0) { DPRINTF(E_FATAL, L_SCAN, "Could not spawn filescanner thread: %s\n", strerror(errno)); goto thread_fail; } #if defined(HAVE_PTHREAD_SETNAME_NP) pthread_setname_np(tid_scan, "filescanner"); #elif defined(HAVE_PTHREAD_SET_NAME_NP) pthread_set_name_np(tid_scan, "filescanner"); #endif return 0; thread_fail: commands_base_free(cmdbase); close(inofd); ino_fail: event_base_free(evbase_scan); return -1; }
int worker_init(void) { int ret; evbase_worker = event_base_new(); if (!evbase_worker) { DPRINTF(E_LOG, L_MAIN, "Could not create an event base\n"); goto evbase_fail; } cmdbase = commands_base_new(evbase_worker, NULL); ret = pthread_create(&tid_worker, NULL, worker, NULL); if (ret < 0) { DPRINTF(E_LOG, L_MAIN, "Could not spawn worker thread: %s\n", strerror(errno)); goto thread_fail; } #if defined(HAVE_PTHREAD_SETNAME_NP) pthread_setname_np(tid_worker, "worker"); #elif defined(HAVE_PTHREAD_SET_NAME_NP) pthread_set_name_np(tid_worker, "worker"); #endif return 0; thread_fail: commands_base_free(cmdbase); event_base_free(evbase_worker); evbase_worker = NULL; evbase_fail: return -1; }
/* Thread: main */ int filescanner_init(void) { int ret; scan_exit = 0; scanning = 0; evbase_scan = event_base_new(); if (!evbase_scan) { DPRINTF(E_FATAL, L_SCAN, "Could not create an event base\n"); return -1; } #ifdef HAVE_PIPE2 ret = pipe2(exit_pipe, O_CLOEXEC); #else ret = pipe(exit_pipe); #endif if (ret < 0) { DPRINTF(E_FATAL, L_SCAN, "Could not create pipe: %s\n", strerror(errno)); goto pipe_fail; } exitev = event_new(evbase_scan, exit_pipe[0], EV_READ, exit_cb, NULL); if (!exitev || (event_add(exitev, NULL) < 0)) { DPRINTF(E_LOG, L_SCAN, "Could not create/add command event\n"); goto exitev_fail; } ret = inofd_event_set(); if (ret < 0) { goto ino_fail; } cmdbase = commands_base_new(evbase_scan); ret = pthread_create(&tid_scan, NULL, filescanner, NULL); if (ret != 0) { DPRINTF(E_FATAL, L_SCAN, "Could not spawn filescanner thread: %s\n", strerror(errno)); goto thread_fail; } #if defined(HAVE_PTHREAD_SETNAME_NP) pthread_setname_np(tid_scan, "filescanner"); #elif defined(HAVE_PTHREAD_SET_NAME_NP) pthread_set_name_np(tid_scan, "filescanner"); #endif return 0; thread_fail: commands_base_free(cmdbase); close(inofd); exitev_fail: ino_fail: close(exit_pipe[0]); close(exit_pipe[1]); pipe_fail: event_base_free(evbase_scan); return -1; }