diff options
Diffstat (limited to 'locks')
-rw-r--r-- | locks/unix/crossproc.c | 12 | ||||
-rw-r--r-- | locks/unix/locks.h | 5 |
2 files changed, 11 insertions, 6 deletions
diff --git a/locks/unix/crossproc.c b/locks/unix/crossproc.c index 24d3a6b5e..b131755d9 100644 --- a/locks/unix/crossproc.c +++ b/locks/unix/crossproc.c @@ -56,12 +56,14 @@ #include "locks.h" #if defined (USE_SYSVSEM_SERIALIZE) -ap_status_t lock_cleanup(struct lock_t *lock) +ap_status_t lock_cleanup(void *lock_) { + struct lock_t *lock=lock_; union semun ick; + if (lock->curr_locked == 1) { ick.val = 0; - semctl(new->interproc, 0, IPC_RMID, ick); + semctl(lock->interproc, 0, IPC_RMID, ick); } return APR_SUCCESS; } @@ -71,7 +73,7 @@ ap_status_t create_inter_lock(struct lock_t *new) union semun ick; struct semid_ds buf; - new->interproc = semget(IPC_PRIVATE, 1, IPC_CREATE | 0600); + new->interproc = semget(IPC_PRIVATE, 1, IPC_CREAT | 0600); if (new->interproc < 0) { lock_cleanup(new); @@ -97,7 +99,7 @@ ap_status_t create_inter_lock(struct lock_t *new) ap_status_t lock_inter(struct lock_t *lock) { - new->curr_locked = 1; + lock->curr_locked = 1; if (semop(lock->interproc, &lock->op_on, 1) < 0) { return errno; } @@ -109,7 +111,7 @@ ap_status_t unlock_inter(struct lock_t *lock) if (semop(lock->interproc, &lock->op_off, 1) < 0) { return errno; } - new->curr_locked = 0; + lock->curr_locked = 0; return APR_SUCCESS; } diff --git a/locks/unix/locks.h b/locks/unix/locks.h index ab7a0c077..eae45ce51 100644 --- a/locks/unix/locks.h +++ b/locks/unix/locks.h @@ -88,6 +88,9 @@ #if HAVE_FCNTL_H #include <fcntl.h> #endif +#ifdef HAVE_STRUCT_UNION_SEMUN +#include <sys/sem.h> +#endif #if APR_HAS_THREADS #if HAVE_PTHREAD_H @@ -96,7 +99,7 @@ #endif /* End System Headers */ -#ifndef HAVE_UNION_SEMUN +#ifndef HAVE_STRUCT_UNION_SEMUN /* it makes no sense, but this isn't defined on solaris */ union semun { long val; |