From f94703a8669ed6dc02db3fab1b4b4931238c35f0 Mon Sep 17 00:00:00 2001 From: bol-van Date: Fri, 5 Apr 2024 13:52:54 +0300 Subject: [PATCH] tpws: fix cleanup in resolver_init --- tpws/resolver.c | 80 ++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/tpws/resolver.c b/tpws/resolver.c index 4b1e0d3..920821c 100644 --- a/tpws/resolver.c +++ b/tpws/resolver.c @@ -133,6 +133,36 @@ static void sigbreak(int sig) { } +void resolver_deinit(void) +{ + if (resolver.bInit) + { + resolver.bStop = true; + + // wait all threads to terminate + for (int t = 0; t < resolver.threads; t++) + pthread_kill(resolver.thread[t], SIGUSR1); + for (int t = 0; t < resolver.threads; t++) + { + pthread_kill(resolver.thread[t], SIGUSR1); + pthread_join(resolver.thread[t], NULL); + } + + pthread_mutex_destroy(&resolver.resolve_list_lock); + free(resolver.thread); + + #ifdef __APPLE__ + sem_close(resolver.sem); + #else + sem_destroy(resolver.sem); + #endif + + resolver_clear_list(); + + memset(&resolver,0,sizeof(resolver)); + } +} + bool resolver_init(int threads, int fd_signal_pipe) { int t; @@ -152,7 +182,7 @@ bool resolver_init(int threads, int fd_signal_pipe) if (resolver.sem==SEM_FAILED) { perror("sem_open"); - return false; + goto ex; } // unlink immediately to remove tails sem_unlink(sn); @@ -160,20 +190,19 @@ bool resolver_init(int threads, int fd_signal_pipe) if (sem_init(&resolver._sem,0,0)==-1) { perror("sem_init"); - return false; + goto ex; } resolver.sem = &resolver._sem; #endif - if (pthread_mutex_init(&resolver.resolve_list_lock, NULL)) return false; + if (pthread_mutex_init(&resolver.resolve_list_lock, NULL)) goto ex; - resolver.bStop = false; resolver.fd_signal_pipe = fd_signal_pipe; TAILQ_INIT(&resolver.resolve_list); // start as many threads as we can up to specified number resolver.thread = malloc(sizeof(pthread_t)*threads); - if (!resolver.thread) goto ex1; + if (!resolver.thread) goto ex; memset(&action,0,sizeof(action)); action.sa_handler = sigbreak; @@ -181,12 +210,12 @@ bool resolver_init(int threads, int fd_signal_pipe) pthread_attr_t attr; - if (pthread_attr_init(&attr)) goto ex2; + if (pthread_attr_init(&attr)) goto ex; // set minimum thread stack size if (pthread_attr_setstacksize(&attr,20480)) { pthread_attr_destroy(&attr); - goto ex2; + goto ex; } for(t=0, resolver.threads=threads ; t