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;
   }