You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by dr...@locus.apache.org on 2000/03/14 14:11:32 UTC
cvs commit: apache-2.0/src/lib/apr/locks/beos crossproc.c intraproc.c
dreid 00/03/14 05:11:31
Modified: src/lib/apr/locks/beos crossproc.c intraproc.c
Log:
Cleanup of the locking code for BeOS.
Revision Changes Path
1.6 +21 -13 apache-2.0/src/lib/apr/locks/beos/crossproc.c
Index: crossproc.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/locks/beos/crossproc.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- crossproc.c 2000/03/10 00:06:14 1.5
+++ crossproc.c 2000/03/14 13:11:31 1.6
@@ -60,7 +60,7 @@
ap_lock_t *lock = (ap_lock_t*)data;
if (lock->curr_locked == 1) {
if (atomic_add(&lock->ben_interproc , -1) > 1){
- release_sem (lock->sem_interproc);
+ release_sem (lock->sem_interproc);
}
}
return APR_SUCCESS;
@@ -68,16 +68,18 @@
ap_status_t create_inter_lock(ap_lock_t *new)
{
+ int32 stat;
+
new->sem_interproc = (sem_id)ap_palloc(new->cntxt, sizeof(sem_id));
new->ben_interproc = (int32)ap_palloc(new->cntxt, sizeof(int32));
- new->ben_interproc = 0;
- new->sem_interproc = create_sem(0, "ap_interproc");
- if (new->sem_interproc < B_NO_ERROR){
- lock_inter_cleanup(new);
- return errno;
+ if ((stat = create_sem(0, "ap_interproc")) < B_NO_ERROR) {
+ lock_inter_cleanup(new);
+ return stat;
}
+ new->ben_interproc = 0;
new->curr_locked = 0;
+ new->sem_interproc = stat;
ap_register_cleanup(new->cntxt, (void *)new, lock_inter_cleanup,
ap_null_cleanup);
return APR_SUCCESS;
@@ -85,10 +87,13 @@
ap_status_t lock_inter(ap_lock_t *lock)
{
+ int32 stat;
+
if (atomic_add(&lock->ben_interproc, 1) > 0){
- acquire_sem(lock->sem_interproc);
- } else {
- return errno;
+ if ((stat = acquire_sem(lock->sem_interproc)) != B_NO_ERROR){
+ atomic_add(&lock->ben_interproc, -1);
+ return stat;
+ }
}
lock->curr_locked = 1;
return APR_SUCCESS;
@@ -96,12 +101,15 @@
ap_status_t unlock_inter(ap_lock_t *lock)
{
+ int32 stat;
+
if (atomic_add(&lock->ben_interproc, -1) > 1){
- release_sem(lock->sem_interproc);
- lock->curr_locked = 0;
- } else {
- return errno;
+ if ((stat = release_sem(lock->sem_interproc)) != B_NO_ERROR) {
+ atomic_add(&lock->ben_interproc, 1);
+ return stat;
+ }
}
+ lock->curr_locked = 0;
return APR_SUCCESS;
}
1.6 +18 -11 apache-2.0/src/lib/apr/locks/beos/intraproc.c
Index: intraproc.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/locks/beos/intraproc.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- intraproc.c 2000/03/10 00:06:14 1.5
+++ intraproc.c 2000/03/14 13:11:31 1.6
@@ -60,9 +60,9 @@
ap_lock_t *lock = (ap_lock_t *)data;
if (lock->curr_locked == 1) {
if (atomic_add(&lock->ben_intraproc , -1) > 1){
- release_sem (lock->sem_intraproc);
+ release_sem (lock->sem_intraproc);
} else {
- return errno;
+ return errno;
}
}
return APR_SUCCESS;
@@ -74,12 +74,12 @@
new->sem_intraproc = (sem_id)ap_palloc(new->cntxt, sizeof(sem_id));
new->ben_intraproc = (int32)ap_palloc(new->cntxt, sizeof(int32));
- new->ben_intraproc = 0;
- stat = create_sem(0, "ap_intraproc");
- if (stat < B_NO_ERROR){
+
+ if ((stat = create_sem(0, "ap_intraproc")) < B_NO_ERROR){
lock_intra_cleanup(new);
return stat;
}
+ new->ben_intraproc = 0;
new->sem_intraproc = stat;
new->curr_locked = 0;
ap_register_cleanup(new->cntxt, (void *)new, lock_intra_cleanup,
@@ -89,22 +89,29 @@
ap_status_t lock_intra(ap_lock_t *lock)
{
- lock->curr_locked = 1;
- if (atomic_add (&lock->ben_intraproc, 1) >0){
- if (acquire_sem(lock->sem_intraproc) != B_NO_ERROR){
+ int32 stat;
+
+ if (atomic_add (&lock->ben_intraproc, 1) > 0){
+ if ((stat = acquire_sem(lock->sem_intraproc)) != B_NO_ERROR){
atomic_add(&lock->ben_intraproc,-1);
- return errno;
+ return stat;
}
}
+ lock->curr_locked = 1;
return APR_SUCCESS;
}
ap_status_t unlock_intra(ap_lock_t *lock)
{
+ int32 stat;
+
if (atomic_add(&lock->ben_intraproc, -1) > 1){
- release_sem(lock->sem_intraproc);
- lock->curr_locked = 0;
+ if ((stat = release_sem(lock->sem_intraproc)) != B_NO_ERROR) {
+ atomic_add(&lock->ben_intraproc, 1);
+ return stat;
+ }
}
+ lock->curr_locked = 0;
return APR_SUCCESS;
}