rx_SetConnSecondsUntilNatPing @266
rx_GetServiceSpecific @267
rx_SetServiceSpecific @268
+ rx_NewThreadId @269
; for performance testing
rx_TSFPQGlobSize @2001 DATA
/*
* The rx_pthread_mutex mutex protects the following global variables:
- * rxi_pthread_hinum
+ * rxi_fcfs_thread_num
*/
#else
#define INIT_PTHREAD_LOCKS
#if defined(AFS_PTHREAD_ENV)
EXT int rxi_fcfs_thread_num GLOBALSINIT(0);
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 GLOBALSINIT(0);
#else
#define rxi_fcfs_thread_num (0)
#endif
/* rx_pthread.c */
+extern int rx_NewThreadId(void);
extern void rxi_Delay(int sec);
extern void rxi_InitializeThreadSupport(void);
extern void rxi_StartServerProc(void *(*proc) (void *), int stacksize);
#include <assert.h>
#include <rx/rx_pthread.h>
#include <rx/rx_clock.h>
+#include "rx_atomic.h"
/* Set rx_pthread_event_rescheduled if event_handler should just try
* again instead of sleeping.
afs_kmutex_t rx_clock_mutex;
struct clock rxi_clockNow;
+static rx_atomic_t threadHiNum;
+
+int
+rx_NewThreadId(void) {
+ return rx_atomic_inc_and_read(&threadHiNum);
+}
+
/*
* Delay the current thread the specified number of seconds.
*/
* thread... chose the latter.
*/
MUTEX_ENTER(&rx_pthread_mutex);
- threadID = ++rxi_pthread_hinum;
+ threadID = rx_NewThreadId();
if (rxi_fcfs_thread_num == 0 && rxi_fcfs_thread_num != threadID)
rxi_fcfs_thread_num = threadID;
MUTEX_EXIT(&rx_pthread_mutex);
dpf(("Unable to create Rx event handling thread\n"));
assert(0);
}
- MUTEX_ENTER(&rx_pthread_mutex);
- ++rxi_pthread_hinum;
- MUTEX_EXIT(&rx_pthread_mutex);
+ rx_NewThreadId();
AFS_SIGSET_RESTORE();
MUTEX_ENTER(&listener_mutex);
dpf(("Unable to create socket listener thread\n"));
assert(0);
}
- MUTEX_ENTER(&rx_pthread_mutex);
- ++rxi_pthread_hinum;
- MUTEX_EXIT(&rx_pthread_mutex);
+ rx_NewThreadId();
AFS_SIGSET_RESTORE();
return 0;
}
{
#if defined(AFS_PTHREAD_ENV) && !defined(AFS_NT40_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 *)(intptr_t)rxi_pthread_hinum);
- MUTEX_EXIT(&rx_stats_mutex);
+ pthread_setspecific(rx_thread_id_key,
+ (void *)(intptr_t)rx_NewThreadId());
ViceLog(0,
("Set thread id %p for '%s'\n",
pthread_getspecific(rx_thread_id_key), 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 */
- tid = ++rxi_pthread_hinum;
- MUTEX_EXIT(&rx_stats_mutex);
+ tid = rx_NewThreadId();
pthread_setspecific(rx_thread_id_key, (void *)(intptr_t)tid);
Log("Set thread id %d for FSYNC_sync\n", tid);
#endif /* AFS_PTHREAD_ENV */