From c6c3a9840af9b00da2ccf1255b41e14260632bbd Mon Sep 17 00:00:00 2001 From: Rainer Toebbicke Date: Fri, 17 Jan 2003 18:18:08 +0000 Subject: [PATCH] STABLE12-rx-assign-thread-id-key-to-periodic-helpers-20030117 so each gets own holdbits (cherry picked from commit ea4f1a80d73f62d91f0375d75dec67d38bd86f24) --- 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 bd467e37f..bcdf2dccb 100644 --- a/src/rx/rx_globals.h +++ b/src/rx/rx_globals.h @@ -375,6 +375,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 17f88813a..da4a5d181 100644 --- a/src/rx/rx_pthread.c +++ b/src/rx/rx_pthread.c @@ -133,6 +133,9 @@ void rxi_StartServerProc(proc, 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(); } @@ -330,6 +333,9 @@ void rxi_StartListener() { 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); @@ -371,6 +377,7 @@ rxi_Listen(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 ec2541093..09ef38251 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -635,6 +635,18 @@ main(argc, argv) } +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 FiveMinuteCheckLWP() @@ -643,6 +655,7 @@ static FiveMinuteCheckLWP() char tbuffer[32]; ViceLog(1, ("Starting five minute check process\n")); + setThreadId("FiveMinuteCheckLWP"); while (1) { #ifdef AFS_PTHREAD_ENV sleep(fiveminutes); @@ -681,6 +694,7 @@ static HostCheckLWP() { ViceLog(1, ("Starting Host check process\n")); + setThreadId("HostCheckLWP"); while(1) { #ifdef AFS_PTHREAD_ENV sleep(fiveminutes); -- 2.39.5