Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / lwp / threadname.c
CommitLineData
805e021f
CE
1/*
2 * Copyright 2000, International Business Machines Corporation and others.
3 * All Rights Reserved.
4 *
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
8 */
9/* ********************************************************************** */
10/* */
11/* trheadname.c */
12/* */
13/* Author: Hartmut Reuter */
14/* reuter@rzg.mpg.de */
15/* Date: 01/12/00 */
16/* */
17/* Function - These routiens implement thread names for the */
18/* logging from the servers */
19/* */
20/* ********************************************************************** */
21
22#include <afsconfig.h>
23#include <afs/param.h>
24
25#include <roken.h>
26
27#if defined(AFS_PTHREAD_ENV)
28#include <pthread.h>
29#else /* defined(AFS_PTHREAD_ENV) */
30#include "lwp.h"
31#endif /* defined(AFS_PTHREAD_ENV) */
32
33#define MAX_THREADS 128
34#define MAXTHREADNAMELENGTH 64
35int nThreads = 0;
36#if defined(AFS_PTHREAD_ENV)
37pthread_t ThreadId[MAX_THREADS];
38#else /* defined(AFS_PTHREAD_ENV) */
39PROCESS ThreadId[MAX_THREADS];
40#endif /* defined(AFS_PTHREAD_ENV) */
41char ThreadName[MAX_THREADS][MAXTHREADNAMELENGTH];
42
43char *
44threadname(void)
45{
46 int i;
47 static char MainThread[] = "main";
48 char *ptr;
49 char *p;
50#ifdef AFS_PTHREAD_ENV
51 pthread_t me;
52#else /* AFS_PTHREAD_ENV */
53 PROCESS me;
54#endif /* AFS_PTHREAD_ENV */
55
56#ifdef AFS_PTHREAD_ENV
57 me = pthread_self();
58#else /* AFS_PTHREAD_ENV */
59 me = (PROCESS) LWP_ThreadId();
60#endif /* AFS_PTHREAD_ENV */
61 ptr = &MainThread[0];
62 for (i = 0; i < nThreads; i++) {
63 if (ThreadId[i] == me) {
64 ptr = &ThreadName[i][0];
65 break;
66 }
67 }
68 p = ptr;
69 return p;
70}
71
72int
73registerthread(
74#ifdef AFS_PTHREAD_ENV
75 pthread_t id,
76#else /* AFS_PTHREAD_ENV */
77 PROCESS id,
78#endif /* AFS_PTHREAD_ENV */
79 char *name)
80{
81 int i;
82
83 for (i = 0; i < nThreads; i++) {
84 if (ThreadId[i] == id) {
85 strncpy(&ThreadName[i][0], name, MAXTHREADNAMELENGTH);
86 return 0;
87 }
88 }
89 if (nThreads == MAX_THREADS)
90 return 0;
91 ThreadId[nThreads] = id;
92 strncpy(&ThreadName[nThreads][0], name, MAXTHREADNAMELENGTH);
93 ThreadName[nThreads][MAXTHREADNAMELENGTH - 1] = 0;
94 nThreads++;
95
96 return 0;
97}
98
99int
100swapthreadname(
101#ifdef AFS_PTHREAD_ENV
102 pthread_t id,
103#else /* AFS_PTHREAD_ENV */
104 PROCESS id,
105#endif /* AFS_PTHREAD_ENV */
106 char *new, char *old)
107{
108 int i;
109
110 for (i = 0; i < nThreads; i++) {
111 if (ThreadId[i] == id) {
112 if (old)
113 strncpy(old, &ThreadName[i][0], MAXTHREADNAMELENGTH);
114 strncpy(&ThreadName[i][0], new, MAXTHREADNAMELENGTH);
115 return 0;
116 }
117 }
118 return 1;
119}