summaryrefslogtreecommitdiff
path: root/os2/os2.c
diff options
context:
space:
mode:
authorH.Merijn Brand <h.m.brand@xs4all.nl>2002-10-19 14:10:21 +0000
committerH.Merijn Brand <h.m.brand@xs4all.nl>2002-10-19 14:10:21 +0000
commit3db8f154c4c6e098a5a0bdf7932e8f86fbd2c451 (patch)
tree304393fdb48236335e35a83047fba6223e13f602 /os2/os2.c
parentefc41c8ef9279ab1e5f723c2c73a85333a96e0e2 (diff)
downloadperl-3db8f154c4c6e098a5a0bdf7932e8f86fbd2c451.tar.gz
Happy chainsaw stories; The removal of the 5005 threads
Still imcomplete. Configure will follow p4raw-id: //depot/perl@18030
Diffstat (limited to 'os2/os2.c')
-rw-r--r--os2/os2.c158
1 files changed, 0 insertions, 158 deletions
diff --git a/os2/os2.c b/os2/os2.c
index fcf1bfdef0..b484e9d5df 100644
--- a/os2/os2.c
+++ b/os2/os2.c
@@ -29,161 +29,6 @@
#include "EXTERN.h"
#include "perl.h"
-#ifdef USE_5005THREADS
-
-typedef void (*emx_startroutine)(void *);
-typedef void* (*pthreads_startroutine)(void *);
-
-enum pthreads_state {
- pthreads_st_none = 0,
- pthreads_st_run,
- pthreads_st_exited,
- pthreads_st_detached,
- pthreads_st_waited,
-};
-const char *pthreads_states[] = {
- "uninit",
- "running",
- "exited",
- "detached",
- "waited for",
-};
-
-typedef struct {
- void *status;
- perl_cond cond;
- enum pthreads_state state;
-} thread_join_t;
-
-thread_join_t *thread_join_data;
-int thread_join_count;
-perl_mutex start_thread_mutex;
-
-int
-pthread_join(perl_os_thread tid, void **status)
-{
- MUTEX_LOCK(&start_thread_mutex);
- switch (thread_join_data[tid].state) {
- case pthreads_st_exited:
- thread_join_data[tid].state = pthreads_st_none; /* Ready to reuse */
- MUTEX_UNLOCK(&start_thread_mutex);
- *status = thread_join_data[tid].status;
- break;
- case pthreads_st_waited:
- MUTEX_UNLOCK(&start_thread_mutex);
- Perl_croak_nocontext("join with a thread with a waiter");
- break;
- case pthreads_st_run:
- thread_join_data[tid].state = pthreads_st_waited;
- COND_INIT(&thread_join_data[tid].cond);
- MUTEX_UNLOCK(&start_thread_mutex);
- COND_WAIT(&thread_join_data[tid].cond, NULL);
- COND_DESTROY(&thread_join_data[tid].cond);
- thread_join_data[tid].state = pthreads_st_none; /* Ready to reuse */
- *status = thread_join_data[tid].status;
- break;
- default:
- MUTEX_UNLOCK(&start_thread_mutex);
- Perl_croak_nocontext("join: unknown thread state: '%s'",
- pthreads_states[thread_join_data[tid].state]);
- break;
- }
- return 0;
-}
-
-void
-pthread_startit(void *arg)
-{
- /* Thread is already started, we need to transfer control only */
- pthreads_startroutine start_routine = *((pthreads_startroutine*)arg);
- int tid = pthread_self();
- void *retval;
-
- arg = ((void**)arg)[1];
- if (tid >= thread_join_count) {
- int oc = thread_join_count;
-
- thread_join_count = tid + 5 + tid/5;
- if (thread_join_data) {
- Renew(thread_join_data, thread_join_count, thread_join_t);
- Zero(thread_join_data + oc, thread_join_count - oc, thread_join_t);
- } else {
- Newz(1323, thread_join_data, thread_join_count, thread_join_t);
- }
- }
- if (thread_join_data[tid].state != pthreads_st_none)
- Perl_croak_nocontext("attempt to reuse thread id %i", tid);
- thread_join_data[tid].state = pthreads_st_run;
- /* Now that we copied/updated the guys, we may release the caller... */
- MUTEX_UNLOCK(&start_thread_mutex);
- thread_join_data[tid].status = (*start_routine)(arg);
- switch (thread_join_data[tid].state) {
- case pthreads_st_waited:
- COND_SIGNAL(&thread_join_data[tid].cond);
- break;
- default:
- thread_join_data[tid].state = pthreads_st_exited;
- break;
- }
-}
-
-int
-pthread_create(perl_os_thread *tid, const pthread_attr_t *attr,
- void *(*start_routine)(void*), void *arg)
-{
- void *args[2];
-
- args[0] = (void*)start_routine;
- args[1] = arg;
-
- MUTEX_LOCK(&start_thread_mutex);
- *tid = _beginthread(pthread_startit, /*stack*/ NULL,
- /*stacksize*/ 10*1024*1024, (void*)args);
- MUTEX_LOCK(&start_thread_mutex);
- MUTEX_UNLOCK(&start_thread_mutex);
- return *tid ? 0 : EINVAL;
-}
-
-int
-pthread_detach(perl_os_thread tid)
-{
- MUTEX_LOCK(&start_thread_mutex);
- switch (thread_join_data[tid].state) {
- case pthreads_st_waited:
- MUTEX_UNLOCK(&start_thread_mutex);
- Perl_croak_nocontext("detach on a thread with a waiter");
- break;
- case pthreads_st_run:
- thread_join_data[tid].state = pthreads_st_detached;
- MUTEX_UNLOCK(&start_thread_mutex);
- break;
- default:
- MUTEX_UNLOCK(&start_thread_mutex);
- Perl_croak_nocontext("detach: unknown thread state: '%s'",
- pthreads_states[thread_join_data[tid].state]);
- break;
- }
- return 0;
-}
-
-/* This is a very bastardized version: */
-int
-os2_cond_wait(perl_cond *c, perl_mutex *m)
-{
- int rc;
- STRLEN n_a;
- if ((rc = DosResetEventSem(*c,&n_a)) && (rc != ERROR_ALREADY_RESET))
- Perl_croak_nocontext("panic: COND_WAIT-reset: rc=%i", rc);
- if (m) MUTEX_UNLOCK(m);
- if (CheckOSError(DosWaitEventSem(*c,SEM_INDEFINITE_WAIT))
- && (rc != ERROR_INTERRUPT))
- Perl_croak_nocontext("panic: COND_WAIT: rc=%i", rc);
- if (rc == ERROR_INTERRUPT)
- errno = EINTR;
- if (m) MUTEX_LOCK(m);
-}
-#endif
-
static int exe_is_aout(void);
/*****************************************************************************/
@@ -1406,9 +1251,6 @@ mod2fname(pTHX_ SV *sv)
}
avlen --;
}
-#ifdef USE_5005THREADS
- sum++; /* Avoid conflict of DLLs in memory. */
-#endif
/* We always load modules as *specific* DLLs, and with the full name.
When loading a specific DLL by its full name, one cannot get a
different DLL, even if a DLL with the same basename is loaded already.