diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5CS.c | 2 | ||||
-rw-r--r-- | src/H5Eint.c | 16 | ||||
-rw-r--r-- | src/H5TS.c | 4 | ||||
-rw-r--r-- | src/H5private.h | 9 | ||||
-rw-r--r-- | src/H5win32defs.h | 6 |
5 files changed, 20 insertions, 17 deletions
@@ -135,7 +135,7 @@ H5CS_print_stack(const H5CS_t *fstack, FILE *stream) HDfprintf (stream, "HDF5-DIAG: Function stack from %s ", H5_lib_vers_info_g); /* try show the process or thread id in multiple processes cases*/ #ifdef H5_HAVE_THREADSAFE - HDfprintf (stream, "thread %d.", (int)pthread_self()); + HDfprintf (stream, "thread %lu.", HDpthread_self_ulong()); #else /* H5_HAVE_THREADSAFE */ HDfprintf (stream, "thread 0."); #endif /* H5_HAVE_THREADSAFE */ diff --git a/src/H5Eint.c b/src/H5Eint.c index 34290a4..e0fa482 100644 --- a/src/H5Eint.c +++ b/src/H5Eint.c @@ -275,13 +275,7 @@ H5E_walk1_cb(int n, H5E_error1_t *err_desc, void *client_data) fprintf(stream, "thread 0"); } /* end block */ #elif defined(H5_HAVE_THREADSAFE) -#ifdef _WIN32 - /* use GetCurrentThreadId because pthread_self return cannot be cast */ - /* as an unsigned long on Windows */ - fprintf(stream, "thread %lu", (unsigned long)GetCurrentThreadId()); -#else - fprintf(stream, "thread %lu", (unsigned long)pthread_self()); -#endif + fprintf(stream, "thread %lu", HDpthread_self_ulong()); #else fprintf(stream, "thread 0"); #endif @@ -397,13 +391,7 @@ H5E_walk2_cb(unsigned n, const H5E_error2_t *err_desc, void *client_data) fprintf(stream, "thread 0"); } /* end block */ #elif defined(H5_HAVE_THREADSAFE) -#ifdef _WIN32 - /* use GetCurrentThreadId because pthread_self return cannot be cast */ - /* as an unsigned long on Windows */ - fprintf(stream, "thread %lu", (unsigned long)GetCurrentThreadId()); -#else - fprintf(stream, "thread %lu", (unsigned long)pthread_self()); -#endif + fprintf(stream, "thread %lu", HDpthread_self_ulong()); #else fprintf(stream, "thread 0"); #endif @@ -146,7 +146,7 @@ H5TS_mutex_lock(H5TS_mutex_t *mutex) if (ret_value) return ret_value; - if(mutex->lock_count && pthread_equal(pthread_self(), mutex->owner_thread)) { + if(mutex->lock_count && pthread_equal(HDpthread_self(), mutex->owner_thread)) { /* already owned by self - increment count */ mutex->lock_count++; } else { @@ -155,7 +155,7 @@ H5TS_mutex_lock(H5TS_mutex_t *mutex) pthread_cond_wait(&mutex->cond_var, &mutex->atomic_lock); /* After we've received the signal, take ownership of the mutex */ - mutex->owner_thread = pthread_self(); + mutex->owner_thread = HDpthread_self(); mutex->lock_count = 1; } diff --git a/src/H5private.h b/src/H5private.h index 3d88e7e..162feec 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1356,6 +1356,15 @@ extern char *strdup(const char *s); #define HDstrdup(S) strdup(S) #endif /* HDstrdup */ +#ifndef HDpthread_self + #define HDpthread_self() pthread_self() +#endif /* HDpthread_self */ + +/* Use this version of pthread_self for printing the thread ID */ +#ifndef HDpthread_self_ulong + #define HDpthread_self_ulong() ((unsigned long)pthread_self()) +#endif /* HDpthread_self_ulong */ + #ifdef H5_HAVE_WINDOW_PATH diff --git a/src/H5win32defs.h b/src/H5win32defs.h index 484b73d..6ce8f77 100644 --- a/src/H5win32defs.h +++ b/src/H5win32defs.h @@ -52,5 +52,11 @@ typedef __int64 h5_stat_size_t; #define HDvsnprintf(S,N,FMT,A) _vsnprintf(S,N,FMT,A) #define HDwrite(F,M,Z) _write(F,M,Z) +/* Non-POSIX functions */ + +/* Don't use actual pthread_self on Windows because the return + * type cannot be cast as a ulong like other systems. */ +#define HDpthread_self_ulong() ((unsigned long)GetCurrentThreadId()) + #endif /* _WIN32 */ |