summaryrefslogtreecommitdiff
path: root/locks/unix/proc_mutex.c
diff options
context:
space:
mode:
Diffstat (limited to 'locks/unix/proc_mutex.c')
-rw-r--r--locks/unix/proc_mutex.c88
1 files changed, 40 insertions, 48 deletions
diff --git a/locks/unix/proc_mutex.c b/locks/unix/proc_mutex.c
index d49bfe10c..8b576a890 100644
--- a/locks/unix/proc_mutex.c
+++ b/locks/unix/proc_mutex.c
@@ -62,32 +62,27 @@ static apr_status_t proc_mutex_no_perms_set(apr_proc_mutex_t *mutex,
static apr_status_t proc_mutex_spinsleep_timedacquire(apr_proc_mutex_t *mutex,
apr_interval_time_t timeout)
{
- apr_status_t rv;
- if (timeout < 0) {
- rv = apr_proc_mutex_lock(mutex);
- }
- else {
#define SLEEP_TIME apr_time_from_msec(10)
- for (;;) {
- rv = apr_proc_mutex_trylock(mutex);
- if (!APR_STATUS_IS_EBUSY(rv)) {
- if (rv == APR_SUCCESS) {
- mutex->curr_locked = 1;
- }
- break;
- }
- if (!timeout) {
- rv = APR_TIMEUP;
- break;
- }
- if (timeout > SLEEP_TIME) {
- apr_sleep(SLEEP_TIME);
- timeout -= SLEEP_TIME;
- }
- else {
- apr_sleep(timeout);
- timeout = 0;
+ apr_status_t rv;
+ for (;;) {
+ rv = apr_proc_mutex_trylock(mutex);
+ if (!APR_STATUS_IS_EBUSY(rv)) {
+ if (rv == APR_SUCCESS) {
+ mutex->curr_locked = 1;
}
+ break;
+ }
+ if (timeout <= 0) {
+ rv = APR_TIMEUP;
+ break;
+ }
+ if (timeout > SLEEP_TIME) {
+ apr_sleep(SLEEP_TIME);
+ timeout -= SLEEP_TIME;
+ }
+ else {
+ apr_sleep(timeout);
+ timeout = 0;
}
}
return rv;
@@ -224,10 +219,7 @@ static apr_status_t proc_mutex_posix_tryacquire(apr_proc_mutex_t *mutex)
static apr_status_t proc_mutex_posix_timedacquire(apr_proc_mutex_t *mutex,
apr_interval_time_t timeout)
{
- if (timeout < 0) {
- return proc_mutex_posix_acquire(mutex);
- }
- else if (!timeout) {
+ if (timeout <= 0) {
apr_status_t rv = proc_mutex_posix_tryacquire(mutex);
return (rv == APR_EBUSY) ? APR_TIMEUP : rv;
}
@@ -382,10 +374,7 @@ static apr_status_t proc_mutex_sysv_tryacquire(apr_proc_mutex_t *mutex)
static apr_status_t proc_mutex_sysv_timedacquire(apr_proc_mutex_t *mutex,
apr_interval_time_t timeout)
{
- if (timeout < 0) {
- return proc_mutex_sysv_acquire(mutex);
- }
- else if (!timeout) {
+ if (timeout <= 0) {
apr_status_t rv = proc_mutex_sysv_tryacquire(mutex);
return (rv == APR_EBUSY) ? APR_TIMEUP : rv;
}
@@ -509,9 +498,6 @@ typedef struct {
} proc_pthread_mutex_t;
-static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
- apr_interval_time_t timeout);
-
static APR_INLINE int proc_pthread_mutex_inc(apr_proc_mutex_t *mutex)
{
if (mutex->pthread_refcounting) {
@@ -690,19 +676,8 @@ static apr_status_t proc_mutex_pthread_child_init(apr_proc_mutex_t **mutex,
return APR_SUCCESS;
}
-static apr_status_t proc_mutex_pthread_acquire(apr_proc_mutex_t *mutex)
-{
- return proc_mutex_pthread_timedacquire(mutex, -1);
-}
-
-static apr_status_t proc_mutex_pthread_tryacquire(apr_proc_mutex_t *mutex)
-{
- apr_status_t rv = proc_mutex_pthread_timedacquire(mutex, 0);
- return (rv == APR_TIMEUP) ? APR_EBUSY : rv;
-}
-
-static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
- apr_interval_time_t timeout)
+static apr_status_t proc_mutex_pthread_acquire_ex(apr_proc_mutex_t *mutex,
+ apr_interval_time_t timeout)
{
#if !APR_USE_PROC_PTHREAD_MUTEX_COND && !defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
return proc_mutex_spinsleep_timedacquire(mutex, timeout);
@@ -834,6 +809,23 @@ static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
#endif
}
+static apr_status_t proc_mutex_pthread_acquire(apr_proc_mutex_t *mutex)
+{
+ return proc_mutex_pthread_acquire_ex(mutex, -1);
+}
+
+static apr_status_t proc_mutex_pthread_tryacquire(apr_proc_mutex_t *mutex)
+{
+ apr_status_t rv = proc_mutex_pthread_acquire_ex(mutex, 0);
+ return (rv == APR_TIMEUP) ? APR_EBUSY : rv;
+}
+
+static apr_status_t proc_mutex_pthread_timedacquire(apr_proc_mutex_t *mutex,
+ apr_interval_time_t timeout)
+{
+ return proc_mutex_pthread_acquire_ex(mutex, (timeout <= 0) ? 0 : timeout);
+}
+
static apr_status_t proc_mutex_pthread_release(apr_proc_mutex_t *mutex)
{
apr_status_t rv;