summaryrefslogtreecommitdiff
path: root/locks
diff options
context:
space:
mode:
authorben <ben@13f79535-47bb-0310-9956-ffa450edef68>2000-01-23 01:13:47 +0000
committerben <ben@13f79535-47bb-0310-9956-ffa450edef68>2000-01-23 01:13:47 +0000
commited8e477f9be56edbdaec18813c931e0876f0b9b3 (patch)
treec0064c71408e1eafbedd4e36c22e10d66a68a45d /locks
parenta0aa952c43531e8199b4e90a63174d8c17ab16a1 (diff)
downloadlibapr-ed8e477f9be56edbdaec18813c931e0876f0b9b3.tar.gz
Make interprocess mutexes actually choose, fix semaphore mutexes.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@59613 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'locks')
-rw-r--r--locks/unix/crossproc.c12
-rw-r--r--locks/unix/locks.h5
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;