19 #define sion_assert(expr, args) (assert(expr)) 33 int (*user_lock)(
void *);
34 int (*user_unlock)(
void *);
43 #ifdef SION_USE_PTHREADS 47 #define _USE_NOT_PTHREADS 52 #define SION_FDDATA_INITIALIZER {PTHREAD_MUTEX_INITIALIZER} 54 #define SION_FDDATA_INITIALIZER {} 58 static struct _sion_lockdata {
60 } sion_lockdata = SION_FDDATA_INITIALIZER;
63 int _sion_lock_register_lock_callbacks(
int lock(
void *),
int unlock(
void *),
void *lock_data) {
64 int rc = SION_SUCCESS;
68 DPRINTFP((2,
"_sion_lock_register_lock_callbacks", _SION_DEFAULT_RANK,
"enter\n"));
69 if(_sion_lock_user_cb.lock_defined==1) {
72 _sion_lock_user_cb.lock_defined=1;
73 _sion_lock_user_cb.user_lock=lock;
74 _sion_lock_user_cb.user_unlock=unlock;
75 _sion_lock_user_cb.user_lock_data=lock_data;
77 DPRINTFP((2,
"_sion_lock_register_lock_callbacks", _SION_DEFAULT_RANK,
"lock and unlock function defined, rc=%d\n",rc));
84 int _sion_lock_user_callbacks_defined() {
87 rc=_sion_lock_user_cb.lock_defined;
89 DPRINTFP((2,
"_sion_lock_user_callbacks_defined", _SION_DEFAULT_RANK,
"check user lock cbs, rc=%d\n",rc));
97 if(_sion_lock_user_cb.lock_defined==1) {
98 _sion_lock_user_cb.user_lock(_sion_lock_user_cb.user_lock_data);
100 if(pthread_mutex_lock(&sion_lockdata.lock)) {
109 if(_sion_lock_user_cb.lock_defined==1) {
110 _sion_lock_user_cb.user_unlock(_sion_lock_user_cb.user_lock_data);
112 if(pthread_mutex_unlock(&sion_lockdata.lock)) {
122 if(_sion_lock_user_cb.lock_defined==1) {
123 _sion_lock_user_cb.user_lock(_sion_lock_user_cb.user_lock_data);
125 return(SION_SUCCESS);
128 if(_sion_lock_user_cb.lock_defined==1) {
129 _sion_lock_user_cb.user_unlock(_sion_lock_user_cb.user_lock_data);
131 return(SION_SUCCESS);