include ../config/Makefile.version
LIBOBJS=lwp.o process.o lock.o iomgr.o timer.o fasttime.o preempt.o \
- waitkey.o AFS_component_version_number.o
-LIBTOBJS=tlwp.o process.o lock.o tiomgr.o timer.o fasttime.o preempt.o AFS_component_version_number.o pthread.o
+ waitkey.o threadname.o AFS_component_version_number.o
+LIBTOBJS=tlwp.o process.o lock.o tiomgr.o timer.o fasttime.o preempt.o AFS_component_version_number.o pthread.o threadname.o
noversion: install
lock.o : lock.c lock.h lwp.h
timer.o : timer.c
fasttime.o : fasttime.c
+threadname.o : threadname.c
exc_handling.o : exc_handling.c
LOCK_UNLOCK(lock) \
ENDMAC
+#define ObtainReadLockNoBlock(lock, code)\
+ BEGINMAC \
+ LOCK_LOCK(lock) \
+ if (!((lock)->excl_locked & WRITE_LOCK) && !(lock)->wait_states) {\
+ (lock) -> readers_reading++;\
+ code = 0;\
+ }\
+ else\
+ code = -1; \
+ LOCK_UNLOCK(lock) \
+ ENDMAC
+
#define ObtainWriteLock(lock)\
BEGINMAC \
LOCK_LOCK(lock) \
LOCK_UNLOCK(lock) \
ENDMAC
+#define ObtainWriteLockNoBlock(lock, code)\
+ BEGINMAC \
+ LOCK_LOCK(lock) \
+ if (!(lock)->excl_locked && !(lock)->readers_reading) {\
+ (lock) -> excl_locked = WRITE_LOCK;\
+ code = 0;\
+ }\
+ else\
+ code = -1; \
+ LOCK_UNLOCK(lock) \
+ ENDMAC
+
#define ObtainSharedLock(lock)\
BEGINMAC \
LOCK_LOCK(lock) \
LOCK_UNLOCK(lock) \
ENDMAC
+#define ObtainSharedLockNoBlock(lock, code)\
+ BEGINMAC \
+ LOCK_LOCK(lock) \
+ if (!(lock)->excl_locked && !(lock)->wait_states) {\
+ (lock) -> excl_locked = SHARED_LOCK;\
+ code = 0;\
+ }\
+ else\
+ code = -1; \
+ LOCK_UNLOCK(lock) \
+ ENDMAC
+
#define BoostSharedLock(lock)\
BEGINMAC \
LOCK_LOCK(lock) \
--- /dev/null
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ *
+ * This software has been released under the terms of the IBM Public
+ * License. For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
+ */
+/* ********************************************************************** */
+/* */
+/* trheadname.c */
+/* */
+/* Author: Hartmut Reuter */
+/* reuter@rzg.mpg.de */
+/* Date: 01/12/00 */
+/* */
+/* Function - These routiens implement thread names for the */
+/* logging from the servers */
+/* */
+/* ********************************************************************** */
+
+#include <afs/param.h>
+#if defined(AFS_PTHREAD_ENV)
+#include <pthread.h>
+#else /* defined(AFS_PTHREAD_ENV) */
+#include "lwp.h"
+#endif /* defined(AFS_PTHREAD_ENV) */
+
+#define MAX_THREADS 128
+#define MAXTHREADNAMELENGTH 64
+int nThreads = 0;
+#if defined(AFS_PTHREAD_ENV)
+pthread_t ThreadId[MAX_THREADS];
+#else /* defined(AFS_PTHREAD_ENV) */
+PROCESS ThreadId[MAX_THREADS];
+#endif /* defined(AFS_PTHREAD_ENV) */
+char ThreadName[MAX_THREADS][MAXTHREADNAMELENGTH];
+
+char * threadname ()
+{
+ int i;
+ static char MainThread[] = "main";
+ char *ptr;
+ char *p;
+#ifdef AFS_PTHREAD_ENV
+ pthread_t me;
+#else /* AFS_PTHREAD_ENV */
+ PROCESS me;
+#endif /* AFS_PTHREAD_ENV */
+
+#ifdef AFS_PTHREAD_ENV
+ me = pthread_self();
+#else /* AFS_PTHREAD_ENV */
+ me = (PROCESS) LWP_ThreadId();
+#endif /* AFS_PTHREAD_ENV */
+ ptr = (char *) &MainThread;
+ for (i = 0; i < nThreads; i++) {
+ if (ThreadId[i] == me) {
+ ptr = (char *)&ThreadName[i];
+ break;
+ }
+ }
+ p = ptr;
+ return p;
+}
+
+int registerthread(id, name)
+#ifdef AFS_PTHREAD_ENV
+ pthread_t id;
+#else /* AFS_PTHREAD_ENV */
+ PROCESS id;
+#endif /* AFS_PTHREAD_ENV */
+ char *name;
+{
+ int i;
+
+ for (i = 0; i < nThreads; i++) {
+ if (ThreadId[i] == id) {
+ strncpy(&ThreadName[i][0], name, MAXTHREADNAMELENGTH);
+ return;
+ }
+ }
+ if (nThreads == MAX_THREADS) return;
+ ThreadId[nThreads] = id;
+ strncpy(&ThreadName[nThreads][0], name, MAXTHREADNAMELENGTH);
+ ThreadName[nThreads][MAXTHREADNAMELENGTH -1] =0;
+ nThreads++;
+}
+
+int swapthreadname(id, new, old)
+#ifdef AFS_PTHREAD_ENV
+ pthread_t id;
+#else /* AFS_PTHREAD_ENV */
+ PROCESS id;
+#endif /* AFS_PTHREAD_ENV */
+ char *new;
+ char *old;
+{
+ int i;
+
+ for (i = 0; i < nThreads; i++) {
+ if (ThreadId[i] == id) {
+ if (old)
+ strncpy(old, &ThreadName[i][0], MAXTHREADNAMELENGTH);
+ strncpy(&ThreadName[i][0], new, MAXTHREADNAMELENGTH);
+ return 0;
+ }
+ }
+ return 1;
+}