LWP: kill dead code

the pthreads-wrapper LWP doesn't currently compile. it will need
to be revisited if we ever care. remove it (as well as a bit of other
unused code)

Change-Id: I61e7bc493127ec49347ca02b24db8fa79e4cbb28
Reviewed-on: http://gerrit.openafs.org/3564
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
This commit is contained in:
Derrick Brashear 2010-12-21 09:08:03 -05:00
parent 5d218831f3
commit c845670469
3 changed files with 0 additions and 540 deletions

View File

@ -61,29 +61,6 @@ extern void lwp_abort(void);
#include <fcntl.h>
#endif
#if defined(USE_PTHREADS) || defined(USE_SOLARIS_THREADS)
void IOMGR_Initialize() /* noop */
{ }
void IOMGR_Sleep (seconds)
unsigned seconds;
{
struct timespec itv;
itv.tv_sec = seconds;
itv.tv_nsec = 0;
MUTEX_EXIT(&lwp_mutex);
osi_Assert(pthread_delay_np(&itv) == 0);
MUTEX_ENTER(&lwp_mutex);
}
#else
#ifdef AFS_DECOSF_ENV
extern void *malloc();
#endif /* AFS_DECOSF_ENV */
typedef unsigned char bool;
#define FALSE 0
#define TRUE 1
@ -1020,4 +997,3 @@ void IOMGR_Sleep (int seconds)
timeout.tv_usec = 0;
IOMGR_Select(0, 0, 0, 0, &timeout);
}
#endif /* USE_PTHREADS */

View File

@ -43,12 +43,6 @@ extern char *getenv();
#endif
#include <string.h>
#if !defined(USE_PTHREADS) && !defined(USE_SOLARIS_THREADS)
#ifdef AFS_OSF_ENV
extern void *malloc(int size);
extern void *realloc(void *ptr, int size);
#endif
#ifndef AFS_ARM_LINUX20_ENV
#if defined(AFS_OSF_ENV) || defined(AFS_S390_LINUX20_ENV)
extern int PRE_Block; /* from preempt.c */
@ -1242,27 +1236,6 @@ setlim(int limcon, uchar_t hard, int limit)
}
return (0);
}
#ifdef notdef
/*
* Print the specific limit out
*/
int
plim(char *name, afs_int32 lc, uchar_t hard)
{
struct rlimit rlim;
int lim;
printf("%s \t", name);
(void)getrlimit(lc, &rlim);
lim = hard ? rlim.rlim_max : rlim.rlim_cur;
if (lim == RLIM_INFINITY)
printf("unlimited");
printf("%d %s", lim / 1024, "kbytes");
printf("\n");
}
#endif
#endif
#ifdef AFS_SUN5_ENV
@ -1279,381 +1252,3 @@ LWP_SignalProcess(void *event)
}
#endif
#else
#ifdef USE_SOLARIS_THREADS
#include <thread.h>
#else
#include "pthread.h"
#endif
#include <stdio.h>
#include <assert.h>
pthread_mutex_t lwp_mutex; /* Mutex to ensure mutual exclusion of all LWP threads */
PROCESS lwp_process_list; /* List of LWP initiated threads */
pthread_key_t lwp_process_key; /* Key associating lwp pid with thread */
#define CHECK check(__LINE__);
typedef struct event {
struct event *next; /* next in hash chain */
void *event; /* lwp event: an address */
int refcount; /* Is it in use? */
pthread_cond_t cond; /* Currently associated condition variable */
int seq; /* Sequence number: this is incremented
* by wakeup calls; wait will not return until
* it changes */
} event_t;
#define HASHSIZE 127
event_t *hashtable[HASHSIZE]; /* Hash table for events */
#define hash(event) ((unsigned long) (event) % HASHSIZE);
#if CMA_DEBUG || DEBUGF
char *
lwp_process_string(void)
{
static char id[200];
PROCESS p;
LWP_CurrentProcess(&p);
sprintf(id, "PID %x <%s>", p, p->name);
return id;
}
#endif
void
lwp_unimplemented(char *interface)
{
fprintf(stderr,
"cmalwp: %s is not currently implemented: program aborted\n",
interface);
exit(1);
}
static void
lwpabort(char *interface)
{
fprintf(stderr, "cmalwp: %s failed unexpectedly\n", interface);
abort();
}
int
LWP_QWait(void)
{
lwp_unimplemented("LWP_QWait");
}
int
LWP_QSignal(int pid)
{
lwp_unimplemented("LWP_QSignal");
}
/* Allocate and initialize an LWP process handle. The associated pthread handle
* must be added by the caller, and the structure threaded onto the LWP active
* process list by lwp_thread_process */
static PROCESS
lwp_alloc_process(char *name, pthread_startroutine_t ep, pthread_addr_t arg)
{
PROCESS lp;
lp = (PROCESS) malloc(sizeof(*lp));
assert(lp);
memset(lp, 0, sizeof(*lp));
if (!name) {
char temp[100];
static procnum;
sprintf(temp, "unnamed_process_%04d", ++procnum);
name = (char *)malloc(strlen(temp) + 1);
assert(name);
strcpy(name, temp);
}
lp->name = name;
lp->ep = ep;
lp->arg = arg;
return lp;
}
/* Thread the LWP process descriptor *lp onto the lwp active process list
* and associate a back pointer to the process descriptor from the associated
* thread */
static
lwp_thread_process(PROCESS lp)
{
lp->next = lwp_process_list;
lwp_process_list = lp;
if (pthread_setspecific(lwp_process_key, (pthread_addr_t) lp) != 0)
assert(0);
}
/* The top-level routine used as entry point to explicitly created LWP
* processes. This completes a few details of process creation left
* out by LWP_CreateProcess and calls the user-specified entry point */
static int
lwp_top_level(pthread_addr_t argp)
{
PROCESS lp = (PROCESS) argp;
MUTEX_ENTER(&lwp_mutex);
lwp_thread_process(lp);
(lp->ep) (lp->arg);
MUTEX_EXIT(&lwp_mutex);
/* Should cleanup state */
}
int
LWP_CreateProcess(pthread_startroutine_t ep, int stacksize, int priority,
void *parm, char *name, PROCESS * pid)
{
int status;
pthread_attr_t attr;
pthread_t handle;
PROCESS lp;
#ifndef LWP_NO_PRIORITIES
if (!cmalwp_pri_inrange(priority))
return LWP_EBADPRI;
#endif
if (pthread_attr_create(&attr))
assert(0);
if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
assert(0);
if (stacksize)
if (pthread_attr_setstacksize(&attr, stacksize))
assert(0);
#ifndef BDE_THREADS
(void)pthread_attr_setinheritsched(&attr, PTHREAD_DEFAULT_SCHED);
(void)pthread_attr_setsched(&attr, SCHED_FIFO);
#ifndef LWP_NO_PRIORITIES
(void)pthread_attr_setprio(&attr, cmalwp_lwppri_to_cmapri(priority));
#endif
#endif
lp = lwp_alloc_process(name, (pthread_startroutine_t) ep,
(pthread_addr_t) parm);
/* allow new thread to run if higher priority */
MUTEX_EXIT(&lwp_mutex);
/* process is only added to active list after first time it runs (it adds itself) */
status =
pthread_create(&lp->handle, attr,
(pthread_startroutine_t) lwp_top_level,
(pthread_addr_t) lp);
if (pthread_attr_delete(&attr))
assert(0);
if (pthread_mutex_lock(&lwp_mutex))
assert(0);
if (status != 0) {
free(lp);
return LWP_ENOMEM;
}
if (pid)
*pid = lp;
return LWP_SUCCESS;
}
PROCESS
LWP_ActiveProcess(void)
{ /* returns pid of current process */
PROCESS pid;
if (pthread_getspecific(lwp_process_key, (pthread_addr_t *) & pid))
assert(0);
return pid;
}
int
LWP_CurrentProcess(PROCESS * pid)
{ /* get pid of current process */
if (pthread_getspecific(lwp_process_key, (pthread_addr_t *) pid))
assert(0);
return LWP_SUCCESS;
}
int
LWP_DestroyProcess(PROCESS pid)
{ /* destroy a lightweight process */
lwp_unimplemented("LWP_DestroyProcess");
}
int
LWP_DispatchProcess(void)
{ /* explicit voluntary preemption */
MUTEX_EXIT(&lwp_mutex);
pthread_yield();
MUTEX_ENTER(&lwp_mutex);
return LWP_SUCCESS;
}
static int
lwp_process_key_destructor(void)
{
}
int
LWP_InitializeProcessSupport(int priority, PROCESS * pid)
{
static int initialized = 0;
int status;
static PROCESS lp;
extern main;
int state;
if (initialized) {
if (pid)
*pid = lp;
return LWP_SUCCESS;
}
#ifndef LWP_NO_PRIORITIES
if (priority < 0 || priority > LWP_MAX_PRIORITY)
return LWP_EBADPRI;
#endif
/* Create pthread key to associate LWP process descriptor with each
* LWP-created thread */
if (pthread_keycreate(&lwp_process_key, (pthread_destructor_t)
lwp_process_key_destructor))
assert(0);
lp = lwp_alloc_process("main process", main, 0);
lp->handle = pthread_self();
lwp_thread_process(lp);
#ifndef LWP_NO_PRIORITIES
(void)pthread_setscheduler(pthread_self(), SCHED_FIFO,
cmalwp_lwppri_to_cmapri(priority));
#endif
MUTEX_INIT(&lwp_mutex, "lwp", MUTEX_DEFAULT, 0);
MUTEX_ENTER(&lwp_mutex);
initialized = 1;
if (pid)
*pid = lp;
return LWP_SUCCESS;
}
int
LWP_TerminateProcessSupport(void)
{ /* terminate all LWP support */
lwp_unimplemented("LWP_TerminateProcessSupport");
}
/* Get and initialize event structure corresponding to lwp event (i.e. address) */
static event_t *
getevent(void *event)
{
event_t *evp, *newp;
int hashcode;
hashcode = hash(event);
evp = hashtable[hashcode];
newp = 0;
while (evp) {
if (evp->event == event) {
evp->refcount++;
return evp;
}
if (evp->refcount == 0)
newp = evp;
evp = evp->next;
}
if (!newp) {
newp = (event_t *) malloc(sizeof(event_t));
assert(newp);
newp->next = hashtable[hashcode];
hashtable[hashcode] = newp;
if (pthread_cond_init(&newp->cond, ((pthread_condattr_t) 0)))
assert(0);
newp->seq = 0;
}
newp->event = event;
newp->refcount = 1;
return newp;
}
/* Release the specified event */
#define relevent(evp) ((evp)->refcount--)
int
LWP_WaitProcess(void *event)
{ /* wait on a single event */
struct event *ev;
int seq;
debugf(("%s: wait process (%x)\n", lwp_process_string(), event));
if (event == NULL)
return LWP_EBADEVENT;
ev = getevent(event);
seq = ev->seq;
while (seq == ev->seq) {
if (pthread_cond_wait(&ev->cond, &lwp_mutex))
assert(0);
}
debugf(("%s: Woken up (%x)\n", lwp_process_string(), event));
relevent(ev);
return LWP_SUCCESS;
}
int
LWP_MwaitProcess(int wcount, char *evlist[])
{ /* wait on m of n events */
lwp_unimplemented("LWP_MWaitProcess");
}
int
LWP_NoYieldSignal(void *event)
{
struct event *ev;
debugf(("%s: no yield signal (%x)\n", lwp_process_string(), event));
if (event == NULL)
return LWP_EBADEVENT;
ev = getevent(event);
if (ev->refcount > 1) {
ev->seq++;
if (pthread_cond_broadcast(&ev->cond))
assert(0);
}
relevent(ev);
return LWP_SUCCESS;
}
int
LWP_SignalProcess(void *event)
{
struct event *ev;
debugf(("%s: signal process (%x)\n", lwp_process_string(), event));
if (event == NULL)
return LWP_EBADEVENT;
ev = getevent(event);
if (ev->refcount > 1) {
ev->seq++;
MUTEX_EXIT(&lwp_mutex);
CV_BROADCAST(&ev->cond);
pthread_yield();
MUTEX_ENTER(&lwp_mutex);
}
relevent(ev);
return LWP_SUCCESS;
}
int
LWP_StackUsed(PROCESS pid, int *maxa, int *used)
{
lwp_unimplemented("LWP_StackUsed");
}
int
LWP_NewRock(int Tag, char *Value)
{
lwp_unimplemented("LWP_NewRock");
}
int
LWP_GetRock(int Tag, char **Value)
{
lwp_unimplemented("LWP_GetRock");
}
int
LWP_GetProcessPriority(PROCESS pid, int *priority)
{ /* returns process priority */
lwp_unimplemented("LWP_GetProcessPriority");
}
#endif /* USE_PTHREADS */

View File

@ -72,115 +72,6 @@ extern unsigned int FT_ApproxTime(void);
#define LWP_ENOROCKS -15 /* all rocks are in use */
#define LWP_EBADROCK -16 /* the specified rock does not exist */
# if defined(USE_PTHREADS) || defined(USE_SOLARIS_THREADS)
# ifdef USE_SOLARIS_THREADS
# include <thread.h>
typedef int pthread_t;
typedef void *pthread_addr_t;
typedef void *pthread_condattr_t;
typedef void (*pthread_destructor_t) (void *);
typedef pthread_addr_t(*pthread_startroutine_t) (pthread_addr_t);
#define pthread_mutex_lock mutex_lock
#define pthread_mutex_unlock mutex_unlock
#define pthread_getspecific thr_getspecific
#define pthread_setspecific thr_setspecific
#define pthread_yield thr_yield
/*typedef mutex_t pthread_mutex_t;*/
typedef thread_key_t pthread_key_t;
typedef cond_t PTHREAD_COND, *pthread_cond_t;
#define PTHREAD_DEFAULT_SCHED 1
#define SCHED_FIFO 2
#define MUTEX_FAST_NP 0
#define PTHREAD_DEFAULT_STACK 65536 /* 64 K */
#define PRI_OTHER_MIN 1
#define PRI_OTHER_MAX 127
#define PRI_OTHER_MID ((PRI_OTHER_MIN + PRI_OTHER_MAX)/2)
#define DESTRUCTOR_TAB_CHUNK 20
#define maskAllSignals(o) thr_sigsetmask(SIG_BLOCK,&pthread_allSignals,&o)
#define restoreAllSignals(o) thr_sigsetmask(SIG_SETMASK,&o,NULL)
typedef struct PTHREAD_MUTEX {
int kind;
pthread_t ownerId;
mutex_t fastMutex;
int timesInside;
} PTHREAD_MUTEX, *pthread_mutex_t;
typedef struct PTHREAD_ATTR {
long stackSize;
int prio;
} PTHREAD_ATTR, *pthread_attr_t;
typedef struct {
void (*destructor) (void *);
thread_key_t key;
} dest_slot_t;
typedef struct {
int nentries; /* size allocated (in terms of number of slots) */
int next_free; /* next free slot */
dest_slot_t slot[1];
} pthread_destructor_tab_t;
define DTAB_SIZE(size) (sizeof(pthread_destructor_tab_t) +
(size) * sizeof(dest_slot_t))
# else
# include "pthread.h"
# endif
# include <assert.h>
#define LWP_MAX_PRIORITY 0
#define LWP_NORMAL_PRIORITY 0
#define LWP_NO_PRIORITIES
/*
* We define PROCESS as a pointer to this struct, rather than simply as
* a pthread_t since some applications test for a process handle being
* non-zero. This can't be done on a pthread_t.
*/
typedef struct lwp_process {
pthread_t handle; /* The pthreads handle */
struct lwp_process *next; /* Next LWP process */
char *name; /* LWP name of the process */
pthread_startroutine_t ep; /* Process entry point */
pthread_addr_t arg; /* Initial parameter */
} *PROCESS;
struct rock { /* to hide things associated with this LWP under */
int tag; /* unique identifier for this rock */
char *value; /* pointer to some arbitrary data structure */
};
#define MAXROCKS 4 /* max no. of rocks per LWP */
#define DEBUGF 0
# ifndef BDE_THREADS
/*#define CMA_DEBUG 1*/
# endif
# ifdef CMA_DEBUG
# define LWP_CHECKSTUFF(msg) lwp_checkstuff(msg)
# else
# define LWP_CHECKSTUFF(msg)
# endif
# if DEBUGF
# define debugf(m) printf m
# else
# define debugf(m)
# endif
# define IOMGR_Poll() LWP_DispatchProcess()
/*
* These two macros can be used to enter/exit the LWP context in a CMA
* program. They simply acquire/release the global LWP mutex .
*/
extern pthread_mutex_t lwp_mutex;
#define LWP_EXIT_LWP_CONTEXT() MUTEX_EXIT(&lwp_mutex)
#define LWP_ENTER_LWP_CONTEXT() MUTEX_ENTER(&lwp_mutex)
#else
#ifndef AFS_NT40_ENV
#define lwp_abort() abort()
#endif
@ -345,8 +236,6 @@ extern int lwp_MaxStackSeen;
LWP_CreateProcess((a), (b), (c), (d), (e), (f))
#endif
#endif /* USE_PTHREADS */
/* iomgr.c */
extern fd_set *IOMGR_AllocFDSet(void);
extern int IOMGR_Select(int nfds, fd_set * rfds, fd_set * wfds, fd_set * efds,