From 5073b022fd65c496215a3c6e77636b8436b1564f Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 1 Mar 2009 10:49:48 +0100 Subject: [PATCH] Remove unused empth_terminate() Unused since 4.3.10. Can be used safely only in very special circumstances. Removal allows simplifying pthread.c and ntthread.c some. liblwp left alone. --- include/empthread.h | 12 +----------- src/lib/empthread/lwp.c | 6 ------ src/lib/empthread/ntthread.c | 25 ------------------------- src/lib/empthread/pthread.c | 31 +++++++------------------------ 4 files changed, 8 insertions(+), 66 deletions(-) diff --git a/include/empthread.h b/include/empthread.h index 99300b329..840192e57 100644 --- a/include/empthread.h +++ b/include/empthread.h @@ -112,6 +112,7 @@ int empth_init(void **ctx, int flags); /* * Create a new thread. * ENTRY is the entry point. It will be called with argument UD. + * If it returns, the thread terminates as if it called empth_exit(). * Thread stack is at least SIZE bytes. * FLAGS should be the same as were passed to empth_init(), or zero. * NAME is the thread's name, it is used for logging and debugging. @@ -153,17 +154,6 @@ void empth_exit(void); */ void empth_yield(void); -/* - * Terminate THREAD. - * THREAD will not be scheduled again. Instead, it will terminate as - * if it executed empth_exit(). It is unspecified when exactly that - * happens. - * THREAD must not be the current thread. - * Naive use of this function almost always leads to resource leaks. - * Terminating a thread that may hold locks is not a good idea. - */ -void empth_terminate(empth_t *thread); - /* * Put current thread to sleep until file descriptor FD is ready for I/O. * If FLAGS & EMPTH_FD_READ, wake up if FD is ready for input. diff --git a/src/lib/empthread/lwp.c b/src/lib/empthread/lwp.c index afd3debd6..03bf4a64d 100644 --- a/src/lib/empthread/lwp.c +++ b/src/lib/empthread/lwp.c @@ -98,12 +98,6 @@ empth_yield(void) lwpYield(); } -void -empth_terminate(empth_t *a) -{ - lwpTerminate(a); -} - int empth_select(int fd, int flags, struct timeval *timeout) { diff --git a/src/lib/empthread/ntthread.c b/src/lib/empthread/ntthread.c index 66d7c9541..85c193ada 100644 --- a/src/lib/empthread/ntthread.c +++ b/src/lib/empthread/ntthread.c @@ -81,9 +81,6 @@ struct loc_Thread { /* The user data passed in at create time. */ void *pvUserData; - /* True if this thread has been killed. */ - BOOL bKilled; - /* The entry function for the thread. */ void (*pfnEntry) (void *); @@ -245,14 +242,6 @@ loc_RunThisThread(HANDLE hWaitObject) empth_t *pThread = TlsGetValue(dwTLSIndex); - if (pThread->bKilled) { - if (!pThread->bMainThread) { - TlsSetValue(dwTLSIndex, NULL); - loc_FreeThreadInfo(pThread); - _endthread(); - } - } - hWaitObjects[0] = hThreadMutex; hWaitObjects[1] = hWaitObject; @@ -538,20 +527,6 @@ empth_yield(void) loc_RunThisThread(NULL); } -/************************ - * empth_terminate - * - * Kill off the thread. - */ -void -empth_terminate(empth_t *pThread) -{ - loc_debug("killing thread %s", pThread->szName); - pThread->bKilled = TRUE; - - SetEvent(pThread->hThreadEvent); -} - /************************ * empth_select * diff --git a/src/lib/empthread/pthread.c b/src/lib/empthread/pthread.c index cf651d1c4..9c1163ff5 100644 --- a/src/lib/empthread/pthread.c +++ b/src/lib/empthread/pthread.c @@ -50,18 +50,14 @@ #include #include #include - #include "misc.h" #include "empthread.h" #include "prototypes.h" -#define EMPTH_KILLED 1 -#define EMPTH_INTR 2 - struct empth_t { char *name; /* thread name */ void *ud; /* user data */ - int state; /* my state */ + int wakeup; void (*ep)(void *); /* entry point */ pthread_t id; /* thread id */ }; @@ -170,7 +166,7 @@ empth_init(void **ctx_ptr, int flags) ctx->ep = 0; ctx->ud = 0; ctx->id = pthread_self(); - ctx->state = 0; + ctx->wakeup = 0; pthread_setspecific(ctx_key, ctx); pthread_mutex_lock(&mtx_ctxsw); logerror("pthreads initialized"); @@ -196,7 +192,7 @@ empth_create(void (*entry)(void *), int size, int flags, } ctx->name = strdup(name); ctx->ud = ud; - ctx->state = 0; + ctx->wakeup = 0; ctx->ep = entry; eno = pthread_attr_init(&attr); @@ -233,11 +229,7 @@ empth_restorectx(void) ctx_ptr = pthread_getspecific(ctx_key); *udata = ctx_ptr->ud; - if (ctx_ptr->state == EMPTH_KILLED) { - empth_status("i am dead"); - empth_exit(); - } - ctx_ptr->state = 0; + ctx_ptr->wakeup = 0; empth_status("context restored"); } @@ -281,14 +273,6 @@ empth_yield(void) empth_restorectx(); } -void -empth_terminate(empth_t *a) -{ - empth_status("killing thread %s", a->name); - a->state = EMPTH_KILLED; - pthread_kill(a->id, SIGALRM); -} - int empth_select(int fd, int flags, struct timeval *timeout) { @@ -341,7 +325,7 @@ empth_alarm(int sig) { /* * Nothing to do --- we handle this signal just to let - * empth_wakeup() and empth_terminate() interrupt system calls. + * empth_wakeup() interrupt system calls. */ } @@ -349,8 +333,7 @@ void empth_wakeup(empth_t *a) { empth_status("waking up thread %s", a->name); - if (a->state == 0) - a->state = EMPTH_INTR; + a->wakeup = 1; pthread_kill(a->id, SIGALRM); } @@ -367,7 +350,7 @@ empth_sleep(time_t until) tv.tv_sec = until - time(NULL); tv.tv_usec = 0; res = select(0, NULL, NULL, NULL, &tv); - } while (res < 0 && ctx->state == 0); + } while (res < 0 && !ctx->wakeup); empth_status("sleep done. Waiting for lock"); pthread_mutex_lock(&mtx_ctxsw); empth_restorectx(); -- 2.43.0