]> git.pond.sub.org Git - empserver/commitdiff
Remove unused empth_terminate()
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 1 Mar 2009 09:49:48 +0000 (10:49 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 1 Mar 2009 09:49:48 +0000 (10:49 +0100)
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
src/lib/empthread/lwp.c
src/lib/empthread/ntthread.c
src/lib/empthread/pthread.c

index 99300b329f8d1ff7e94e79fde3b8124ba9c76f0d..840192e570c437ba81290d8bed2c88ac4f0a83ae 100644 (file)
@@ -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.
index afd3debd619178947ba871b727c7075d1cfae9cd..03bf4a64d18050cb8c427a8b6c5044f0a0f03c33 100644 (file)
@@ -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)
 {
index 66d7c95412351bb69ff04e75244bf6c86631fb28..85c193ada210c9629273d3647bd48e8ab61b907a 100644 (file)
@@ -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
  *
index cf651d1c4017d3816ca09df3c0d01de369955e41..9c1163ff5fc888b793f06c64f55df88c2d7c015f 100644 (file)
 #include <sys/types.h>
 #include <sys/time.h>
 #include <unistd.h>
-
 #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();