mirror of
https://git.openafs.org/openafs.git
synced 2025-01-19 15:30:14 +00:00
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:
parent
5d218831f3
commit
c845670469
@ -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 */
|
||||
|
405
src/lwp/lwp.c
405
src/lwp/lwp.c
@ -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 */
|
||||
|
111
src/lwp/lwp.h
111
src/lwp/lwp.h
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user