code = pthread_cond_timedwait(&(stored->cv), &(stored->mtx), &ts);
else
pthread_cond_wait(&(stored->cv), &(stored->mtx));
- if ((stored->nwaiters == 1) && stored->cleanup)
+ if ((stored->nwaiters == 1) && stored->cleanup) {
+ pthread_mutex_unlock(&(stored->mtx));
_StatCleanup(stored);
- else
+ } else {
stored->nwaiters--;
- pthread_mutex_unlock(&(stored->mtx));
+ pthread_mutex_unlock(&(stored->mtx));
+ }
}
if ((code == EINTR) || (code == ETIMEDOUT)) {
afscp_errno = code;
/* avoid blocking callback thread */
pthread_cond_broadcast(&(stored->cv));
stored->cleanup = 1;
- } else
+ pthread_mutex_unlock(&(stored->mtx));
+ } else {
+ pthread_mutex_unlock(&(stored->mtx));
_StatCleanup(stored);
- pthread_mutex_unlock(&(stored->mtx));
+ }
}
return 0;
}