You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@locus.apache.org on 2000/03/31 03:38:28 UTC
cvs commit: apache-2.0/src/lib/apr/locks/unix crossproc.c locks.h
rbb 00/03/30 17:38:28
Modified: src/lib/apr configure.in
src/lib/apr/locks/unix crossproc.c locks.h
Log:
Fix pthread Cross Process locks.
PR: 26
Submitted by: Mike Abbott <mj...@sgi.com>
Reviewed by: Ryan Bloom
Revision Changes Path
1.60 +1 -1 apache-2.0/src/lib/apr/configure.in
Index: configure.in
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/configure.in,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- configure.in 2000/03/27 19:02:14 1.59
+++ configure.in 2000/03/31 01:38:26 1.60
@@ -373,7 +373,7 @@
AC_IFALLYES(header:fcntl.h define:F_SETLK,
AC_DECIDE(USE_FCNTL_SERIALIZE, [SVR4-style fcntl()]))
AC_IFALLYES(header:pthread.h define:PTHREAD_PROCESS_SHARED dnl
- custom:use_pthread_cross,
+ custom:with_pthread_cross,
AC_DECIDE(USE_PROC_PTHREAD_SERIALIZE, [pthread mutex]))
dnl AC_DECISION_FORCE(USE_FCNTL_SERIALIZE)
AC_END_DECISION
1.19 +11 -7 apache-2.0/src/lib/apr/locks/unix/crossproc.c
Index: crossproc.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/locks/unix/crossproc.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- crossproc.c 2000/03/21 03:18:31 1.18
+++ crossproc.c 2000/03/31 01:38:27 1.19
@@ -141,8 +141,10 @@
void setup_lock() {
}
-ap_status_t lock_cleanup(struct lock_t *lock)
+ap_status_t lock_cleanup(void *lock_)
{
+ struct lock_t *lock=lock_;
+
if (lock->curr_locked == 1) {
if (pthread_mutex_unlock(lock->interproc)) {
return errno;
@@ -168,7 +170,7 @@
new->interproc = (pthread_mutex_t *)mmap((caddr_t) 0,
sizeof(pthread_mutex_t),
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (new->interproc = (void *) (caddr_t) -1) {
+ if (new->interproc = (pthread_mutex_t *) (caddr_t) -1) {
return errno;
}
close(fd);
@@ -187,7 +189,7 @@
return stat;
}
- if ((stat = pthread_mutex_destroy(&mattr))) {
+ if ((stat = pthread_mutexattr_destroy(&mattr))) {
lock_cleanup(new);
return stat;
}
@@ -200,7 +202,7 @@
ap_status_t lock_inter(struct lock_t *lock)
{
ap_status_t stat;
- new->curr_locked = 1;
+ lock->curr_locked = 1;
if (stat = pthread_mutex_lock(lock->interproc)) {
return stat;
}
@@ -212,9 +214,9 @@
ap_status_t stat;
if (stat = pthread_mutex_unlock(lock->interproc)) {
- returno stat;
+ return stat;
}
- new->curr_locked = 0;
+ lock->curr_locked = 0;
return APR_SUCCESS;
}
@@ -317,8 +319,10 @@
void setup_lock() {
}
-ap_status_t lock_cleanup(struct lock_t *lock)
+ap_status_t lock_cleanup(void *lock_)
{
+ struct lock_t *lock=lock_;
+
if (lock->curr_locked == 1) {
if (flock(lock->interproc, LOCK_UN) < 0) {
return errno;
1.14 +3 -0 apache-2.0/src/lib/apr/locks/unix/locks.h
Index: locks.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/locks/unix/locks.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- locks.h 2000/03/10 04:15:40 1.13
+++ locks.h 2000/03/31 01:38:27 1.14
@@ -88,6 +88,9 @@
#if HAVE_FCNTL_H
#include <fcntl.h>
#endif
+#if HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
#if APR_HAS_THREADS
#if HAVE_PTHREAD_H