rx-assign-thread-id-key-to-periodic-helpers-20030117
authorRainer Toebbicke <Rainer.Toebbicke@cern.ch>
Fri, 17 Jan 2003 18:13:19 +0000 (18:13 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 17 Jan 2003 18:13:19 +0000 (18:13 +0000)
so each gets own holdbits

src/rx/rx_globals.h
src/rx/rx_pthread.c
src/viced/viced.c

index 51b40e7..5363346 100644 (file)
@@ -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)
index 5fcd1fd..2a73d40 100644 (file)
@@ -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;
 }
index bc2fdb9..b71e92c 100644 (file)
@@ -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);