afsconfig-and-rcsid-all-around-20010705
[openafs.git] / src / lwp / threadname.c
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 <afs/param.h>
23 #include <afsconfig.h>
24
25 RCSID("$Header$");
26
27 #ifdef HAVE_STRINGS_H
28 #include <strings.h>
29 #else
30 #ifdef HAVE_STRING_H
31 #include <string.h>
32 #endif
33 #endif
34 #if defined(AFS_PTHREAD_ENV)
35 #include <pthread.h>
36 #else /* defined(AFS_PTHREAD_ENV) */
37 #include "lwp.h"
38 #endif /* defined(AFS_PTHREAD_ENV) */
39
40 #define MAX_THREADS 128
41 #define MAXTHREADNAMELENGTH 64
42 int nThreads = 0;
43 #if defined(AFS_PTHREAD_ENV)
44 pthread_t ThreadId[MAX_THREADS];
45 #else /* defined(AFS_PTHREAD_ENV) */
46 PROCESS   ThreadId[MAX_THREADS];
47 #endif /* defined(AFS_PTHREAD_ENV) */
48 char      ThreadName[MAX_THREADS][MAXTHREADNAMELENGTH];
49
50 char * threadname ()
51 {
52     int i;
53     static char MainThread[] = "main";
54     char *ptr;
55     char *p;
56 #ifdef AFS_PTHREAD_ENV
57     pthread_t me;
58 #else /* AFS_PTHREAD_ENV */
59     PROCESS me;
60 #endif /* AFS_PTHREAD_ENV */
61
62 #ifdef AFS_PTHREAD_ENV
63     me =  pthread_self();
64 #else /* AFS_PTHREAD_ENV */
65     me =  (PROCESS) LWP_ThreadId();
66 #endif /* AFS_PTHREAD_ENV */
67     ptr = (char *) &MainThread; 
68     for (i = 0; i < nThreads; i++) {
69        if (ThreadId[i] == me) {
70            ptr = (char *)&ThreadName[i];
71            break;
72        }
73  }
74     p = ptr;
75     return p;
76 }
77
78 int registerthread(id, name)
79 #ifdef AFS_PTHREAD_ENV
80     pthread_t id;
81 #else /* AFS_PTHREAD_ENV */
82     PROCESS id;
83 #endif /* AFS_PTHREAD_ENV */
84     char *name;
85 {
86     int i;
87
88     for (i = 0; i < nThreads; i++) {
89        if (ThreadId[i] == id) {
90            strncpy(&ThreadName[i][0], name, MAXTHREADNAMELENGTH);
91            return 0;
92        }
93     }
94     if (nThreads == MAX_THREADS) return 0;
95     ThreadId[nThreads] = id;
96     strncpy(&ThreadName[nThreads][0], name, MAXTHREADNAMELENGTH);
97     ThreadName[nThreads][MAXTHREADNAMELENGTH -1] =0;
98     nThreads++;
99
100     return 0;
101 }
102
103 int swapthreadname(id, new, old)
104 #ifdef AFS_PTHREAD_ENV
105     pthread_t id;
106 #else /* AFS_PTHREAD_ENV */
107     PROCESS id;
108 #endif /* AFS_PTHREAD_ENV */
109     char *new;
110     char *old;
111 {
112     int i;
113
114     for (i = 0; i < nThreads; i++) {
115         if (ThreadId[i] == id) {
116            if (old)
117                 strncpy(old, &ThreadName[i][0], MAXTHREADNAMELENGTH);
118             strncpy(&ThreadName[i][0], new, MAXTHREADNAMELENGTH);
119             return 0;
120         }
121     }
122     return 1;
123 }