critical impact:
Thread-Independent Services (tis) - not supported; temporarily available (CrUn42)
Problem description
The Thread-independent services (tis) routines are specific to Tru64 UNIX, and are not supported on HP-UX.
The tis routines compose a Compaq proprietary interface to the DECthreads multitasking library. Although these routines are not supported on HP-UX, they will be temporarily provided on HP-UX through the installation of the Tru64 UNIX Migration Environment for HP-UX.
The Migration Environment contains Tru64 UNIX APIs, development tools, and commands and utilities to assist customers in migrating their applications from Tru64 UNIX to HP-UX. Identifiers
 tis_cond_broadcast |
 tis_mutex_trylock |
 tis_cond_destroy |
 tis_mutex_unlock |
 tis_cond_init |
 tis_once |
 tis_cond_signal |
 tis_read_lock |
 tis_cond_timedwait |
 tis_read_trylock |
 tis_cond_wait |
 tis_read_unlock |
 tis_get_expiration |
 tis_rwlock_destroy |
 tis_getspecific |
 tis_rwlock_init |
 tis_key_create |
 tis_self |
 tis_key_create_new |
 tis_setcancelstate |
 tis_key_delete |
 tis_setspecific |
 tis_lock_global |
 tis_testcancel |
 tis_mutex_destroy |
 tis_unlock_global |
 tis_mutex_init |
 tis_write_lock |
 tis_mutex_initwithname |
 tis_write_trylock |
 tis_mutex_lock |
 tis_write_unlock |
See also
Solution description
The tis routines will be temporarily provided on HP-UX through the Tru64 UNIX Migration Environment for HP-UX, not as part of the base HP-UX operating system. For a long-term solution, we recommend that you change your code.
Change each tis routine to its corresponding pthread routine on HP-UX, and include the following line in your code:
#include <pthread.h>
The following table shows Tru64 UNIX tis routines and their corresponding HP-UX pthread routines:
tis Routine pthread Routine
----------- ---------------
tis_write_unlock pthread_rwlock_unlock
tis_write_trylock pthread_rwlock_trywrlock
tis_write_lock pthread_rwlock_wrlock
tis_testcancel pthread_testcancel
tis_setspecific pthread_setspecific
tis_setcancelstate pthread_setcancelstate
tis_self pthread_self
tis_rwlock_destroy pthread_rwlock_destroy
tis_read_unlock pthread_rwlock_unlock
tis_read_trylock pthread_rwlock_tryrlock
tis_read_lock pthread_rwlock_rdlock
tis_once pthread_once
tis_mutex_unlock pthread_mutex_unlock
tis_mutex_trylock pthread_mutex_trylock
tis_mutex_lock pthread_mutex_lock
tis_mutex_destroy pthread_mutex_destroy
tis_key_delete pthread_key_delete
tis_getspecific pthread_getspecific
tis_cond_wait pthread_cond_wait
tis_cond_timedwait pthread_cond_timedwait
tis_cond_signal pthread_cond_signal
tis_cond_destroy pthread_cond_destroy
tis_cond_broadcast pthread_cond_broadcast
tis_key_create pthread_key_create
tis_mutex_init pthread_mutex_init
tis_mutex_initwithname pthread_mutex_init
tis_key_create_new pthread_key_create
tis_cond_init pthread_cond_init
tis_rwlock_init pthread_rwlock_init
tis_get_expiration None
You can also replace the tis_get_expiration routine by with the proper portable POSIX code, by calling clock_gettime() and computing the proper struct timespec timeout.
Any code that depends on the global lock routines (tis_lock_global and tis_unlock_global) is extremely inefficient. Redesign your code by developing real locking strategies that do not bottleneck the entire application. See also
Problem summary
| classifications |
source types |
OS release |
severity |
type |
| ME, TH |
C, C++ |
any HP-UX 11i version |
critical |
unavailable |
|