From ea4f1a80d73f62d91f0375d75dec67d38bd86f24 Mon Sep 17 00:00:00 2001 From: Rainer Toebbicke Date: Fri, 17 Jan 2003 18:13:19 +0000 Subject: [PATCH] rx-assign-thread-id-key-to-periodic-helpers-20030117 so each gets own holdbits --- src/rx/rx_globals.h | 3 +++ src/rx/rx_pthread.c | 7 +++++++ src/viced/viced.c | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/rx/rx_globals.h b/src/rx/rx_globals.h index 51b40e7e1..536334660 100644 --- a/src/rx/rx_globals.h +++ b/src/rx/rx_globals.h @@ -318,6 +318,9 @@ EXT int rxi_callAbortDelay INIT(3000); #if defined(AFS_PTHREAD_ENV) EXT pthread_key_t rx_thread_id_key; +/* keep track of pthread numbers - protected by rx_stats_mutex, + except in rx_Init() before mutex exists! */ +EXT int rxi_pthread_hinum INIT(0); #endif #if defined(RX_ENABLE_LOCKS) diff --git a/src/rx/rx_pthread.c b/src/rx/rx_pthread.c index 5fcd1fd55..2a73d4051 100644 --- a/src/rx/rx_pthread.c +++ b/src/rx/rx_pthread.c @@ -130,6 +130,9 @@ void rxi_StartServerProc(void (*proc)(void), int stacksize) printf("Unable to Create Rx server thread\n"); exit(1); } + MUTEX_ENTER(&rx_stats_mutex); + ++rxi_pthread_hinum; + MUTEX_EXIT(&rx_stats_mutex); AFS_SIGSET_RESTORE(); } @@ -326,6 +329,9 @@ void rxi_StartListener(void) printf("Unable to create Rx event handling thread\n"); exit(1); } + MUTEX_ENTER(&rx_stats_mutex); + ++rxi_pthread_hinum; + MUTEX_EXIT(&rx_stats_mutex); AFS_SIGSET_RESTORE(); assert(pthread_mutex_lock(&listener_mutex)==0); @@ -366,6 +372,7 @@ int rxi_Listen(osi_socket sock) printf("Unable to create socket listener thread\n"); exit(1); } + ++rxi_pthread_hinum; AFS_SIGSET_RESTORE(); return 0; } diff --git a/src/viced/viced.c b/src/viced/viced.c index bc2fdb9dd..b71e92c53 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -332,6 +332,18 @@ CheckAdminName() } /*CheckAdminName*/ +static void setThreadId(char *s) +{ +#ifdef AFS_PTHREAD_ENV + /* set our 'thread-id' so that the host hold table works */ + MUTEX_ENTER(&rx_stats_mutex); /* protects rxi_pthread_hinum */ + ++rxi_pthread_hinum; + pthread_setspecific(rx_thread_id_key, (void *)rxi_pthread_hinum); + MUTEX_EXIT(&rx_stats_mutex); + ViceLog(0,("Set thread id %d for '%s'\n", pthread_getspecific(rx_thread_id_key), s)); +#endif +} + /* This LWP does things roughly every 5 minutes */ static void FiveMinuteCheckLWP() { @@ -339,6 +351,7 @@ static void FiveMinuteCheckLWP() char tbuffer[32]; ViceLog(1, ("Starting five minute check process\n")); + setThreadId("FiveMinuteCheckLWP"); while (1) { #ifdef AFS_PTHREAD_ENV sleep(fiveminutes); @@ -380,6 +393,7 @@ static void FiveMinuteCheckLWP() static void HostCheckLWP() { ViceLog(1, ("Starting Host check process\n")); + setThreadId("HostCheckLWP"); while(1) { #ifdef AFS_PTHREAD_ENV sleep(fiveminutes); -- 2.39.5