os0thread.c, configure.in:

  Make the typecast trick pthread_t -> os_thread_id_t safer, but a full fix needs usage of appropriate Posix functions
parent 7445d68d
...@@ -86,7 +86,7 @@ fi ...@@ -86,7 +86,7 @@ fi
case "$target_os" in case "$target_os" in
hp*) hp*)
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";; CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE -DUNIV_HPUX";;
irix*) irix*)
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";; CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
osf*) osf*)
......
...@@ -32,12 +32,27 @@ os_thread_get_curr_id(void) ...@@ -32,12 +32,27 @@ os_thread_get_curr_id(void)
pthr = pthread_self(); pthr = pthread_self();
#ifdef UNIV_HPUX
/* TODO: in the future we have to change os_thread_id /* TODO: in the future we have to change os_thread_id
to pthread_t; the following cast may work in a wrong way on some to pthread_t; the following cast may work in a wrong way on some
systems if pthread_t is a struct; this is just a quick fix systems if pthread_t is a struct; this is just a quick fix
for HP-UX to eliminate a compiler warning */ for HP-UX to eliminate a compiler warning */
/* The below typecast trick will certainly not work if this assertion
fails */
ut_a(sizeof(pthread_t) >= sizeof(os_thread_id_t));
return(*(os_thread_id_t*)((void*) (&pthr))); return(*(os_thread_id_t*)((void*) (&pthr)));
#else
/* TODO: define os_thread_id_t in Unix as the same as pthread_t
and compare them with appropriate Posix pthread functions!
The following typecast will not work if pthread_t is not
an integer or a pointer to a unique object for the thread! */
return((os_thread_id_t)pthr);
#endif
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment