/* * 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 #if defined(AFS_PTHREAD_ENV) #include #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; }