rx-thread-id-assignment-fixes-20030203
authorRainer Toebbicke <rtb@pclella.cern.ch>
Mon, 3 Feb 2003 20:45:51 +0000 (20:45 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 3 Feb 2003 20:45:51 +0000 (20:45 +0000)
in rx_pthread.c the
++rxi_pthread_hinum;
has to be protected by the rx_stats_mutex in all three cases. In the file I
attached in the openafs-devel article the last one was accidentally
unprotected.

the FSYNC_sync thread (fssync.c) needs needs to be handled as well.

src/rx/rx_pthread.c
src/vol/fssync.c

index 2a73d40..3820d2e 100644 (file)
@@ -372,7 +372,9 @@ int rxi_Listen(osi_socket sock)
        printf("Unable to create socket listener thread\n");
        exit(1);
     }
+    MUTEX_ENTER(&rx_stats_mutex);
     ++rxi_pthread_hinum;
+    MUTEX_EXIT(&rx_stats_mutex);
     AFS_SIGSET_RESTORE();
     return 0;
 }
index 09d0d23..7fabc4d 100644 (file)
@@ -261,10 +261,23 @@ static void FSYNC_sync() {
     extern VInit;
     int code;
     int numTries;
+#ifdef AFS_PTHREAD_ENV
+    int tid;
+#endif
 
 #ifndef AFS_NT40_ENV
     signal(SIGPIPE, SIG_IGN);
 #endif
+
+#ifdef AFS_PTHREAD_ENV
+    /* set our 'thread-id' so that the host hold table works */ 
+    MUTEX_ENTER(&rx_stats_mutex);   /* protects rxi_pthread_hinum */
+    tid=++rxi_pthread_hinum;
+    MUTEX_EXIT(&rx_stats_mutex);
+    pthread_setspecific(rx_thread_id_key, (void *)tid);
+    Log("Set thread id %d for FSYNC_sync\n", tid);
+#endif /* AFS_PTHREAD_ENV */
+
     while (!VInit) {
       /* Let somebody else run until level > 0.  That doesn't mean that 
        * all volumes have been attached. */