You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by dr...@apache.org on 2000/12/31 19:48:04 UTC

cvs commit: apr/threadproc/beos thread.c

dreid       00/12/31 10:48:04

  Modified:    include/arch/beos locks.h
               locks/beos crossproc.c intraproc.c locks.c
               threadproc/beos thread.c
  Log:
  Various bits of tidying up mainly for locking, but a few thread bits as well.
  
  Submitted by:	Carlos Hasan <ch...@acm.org>
  Reviewed by:	David Reid   <dr...@apache.org>
  
  Revision  Changes    Path
  1.10      +1 -3      apr/include/arch/beos/locks.h
  
  Index: locks.h
  ===================================================================
  RCS file: /home/cvs/apr/include/arch/beos/locks.h,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- locks.h	2000/08/02 05:26:19	1.9
  +++ locks.h	2000/12/31 18:48:02	1.10
  @@ -65,9 +65,7 @@
       apr_pool_t *cntxt;
       apr_locktype_e type;
       apr_lockscope_e scope;
  -    int curr_locked;
  -    char *fname;
  -	/* Inter proc */
  +    /* Inter proc */
       sem_id sem_interproc;
       int32  ben_interproc;
       /* Intra Proc */
  
  
  
  1.18      +9 -10     apr/locks/beos/crossproc.c
  
  Index: crossproc.c
  ===================================================================
  RCS file: /home/cvs/apr/locks/beos/crossproc.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- crossproc.c	2000/11/09 06:25:28	1.17
  +++ crossproc.c	2000/12/31 18:48:02	1.18
  @@ -57,8 +57,13 @@
   apr_status_t lock_inter_cleanup(void * data)
   {
       apr_lock_t *lock = (apr_lock_t*)data;
  -    if (lock->curr_locked == 1) {
  -    	if (atomic_add(&lock->ben_interproc , -1) > 1){
  +    if (lock->ben_interproc != 0) {
  +        /* we're still locked... */
  +    	while (atomic_add(&lock->ben_interproc , -1) > 1){
  +    	    /* OK we had more than one person waiting on the lock so 
  +    	     * the sem is also locked. Release it until we have no more
  +    	     * locks left.
  +    	     */
               release_sem (lock->sem_interproc);
       	}
       }
  @@ -70,15 +75,11 @@
   {
       int32 stat;
       
  -    new->sem_interproc = (sem_id)apr_palloc(new->cntxt, sizeof(sem_id));
  -    new->ben_interproc = (int32)apr_palloc(new->cntxt, sizeof(int32));
  -
       if ((stat = create_sem(0, "apr_interproc")) < B_NO_ERROR) {
           lock_inter_cleanup(new);
           return stat;
       }
       new->ben_interproc = 0;
  -    new->curr_locked = 0;
       new->sem_interproc = stat;
       apr_register_cleanup(new->cntxt, (void *)new, lock_inter_cleanup,
                           apr_null_cleanup);
  @@ -90,12 +91,11 @@
       int32 stat;
       
   	if (atomic_add(&lock->ben_interproc, 1) > 0){
  -		if ((stat = acquire_sem(lock->sem_interproc)) != B_NO_ERROR){
  +		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;
   }
   
  @@ -104,12 +104,11 @@
       int32 stat;
       
   	if (atomic_add(&lock->ben_interproc, -1) > 1){
  -        if ((stat = release_sem(lock->sem_interproc)) != B_NO_ERROR) {
  +        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.14      +5 -13     apr/locks/beos/intraproc.c
  
  Index: intraproc.c
  ===================================================================
  RCS file: /home/cvs/apr/locks/beos/intraproc.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- intraproc.c	2000/11/09 06:25:28	1.13
  +++ intraproc.c	2000/12/31 18:48:03	1.14
  @@ -57,11 +57,9 @@
   apr_status_t lock_intra_cleanup(void *data)
   {
       apr_lock_t *lock = (apr_lock_t *)data;
  -    if (lock->curr_locked == 1) {
  -    	if (atomic_add(&lock->ben_intraproc , -1) > 1){
  +    if (lock->ben_intraproc != 0) {
  +    	while (atomic_add(&lock->ben_intraproc , -1) > 1){
               release_sem (lock->sem_intraproc);
  -    	} else {
  -            return errno;
       	}
       }
       delete_sem(lock->sem_intraproc);
  @@ -70,10 +68,7 @@
   
   apr_status_t create_intra_lock(apr_lock_t *new)
   {
  -    int32 stat;
  -    new->sem_intraproc = (sem_id)apr_palloc(new->cntxt, sizeof(sem_id));
  -    new->ben_intraproc = (int32)apr_palloc(new->cntxt, sizeof(int32));
  -    
  +    int32 stat;    
       
       if ((stat = create_sem(0, "apr_intraproc")) < B_NO_ERROR){
       	lock_intra_cleanup(new);
  @@ -81,7 +76,6 @@
       }
       new->ben_intraproc = 0;
       new->sem_intraproc = stat;
  -    new->curr_locked = 0;
       apr_register_cleanup(new->cntxt, (void *)new, lock_intra_cleanup,
                           apr_null_cleanup);
       return APR_SUCCESS;
  @@ -92,12 +86,11 @@
       int32 stat;
       
       if (atomic_add (&lock->ben_intraproc, 1) > 0){
  -        if ((stat = acquire_sem(lock->sem_intraproc)) != B_NO_ERROR){
  +        if ((stat = acquire_sem(lock->sem_intraproc)) < B_NO_ERROR){
               atomic_add(&lock->ben_intraproc,-1);
   	        return stat;
           }
       }
  -    lock->curr_locked = 1;
       return APR_SUCCESS;
   }
   
  @@ -106,12 +99,11 @@
       int32 stat;
       
       if (atomic_add(&lock->ben_intraproc, -1) > 1){
  -        if ((stat = release_sem(lock->sem_intraproc)) != B_NO_ERROR) {
  +        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;
   }
   
  
  
  
  1.23      +0 -1      apr/locks/beos/locks.c
  
  Index: locks.c
  ===================================================================
  RCS file: /home/cvs/apr/locks/beos/locks.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- locks.c	2000/11/19 01:05:15	1.22
  +++ locks.c	2000/12/31 18:48:03	1.23
  @@ -71,7 +71,6 @@
       new->cntxt = cont;
       new->type  = type;
       new->scope = scope;
  -    new->fname = apr_pstrdup(cont, fname);
   
       if (scope != APR_CROSS_PROCESS) {
           if ((stat = create_intra_lock(new)) != APR_SUCCESS) {
  
  
  
  1.16      +0 -7      apr/threadproc/beos/thread.c
  
  Index: thread.c
  ===================================================================
  RCS file: /home/cvs/apr/threadproc/beos/thread.c,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- thread.c	2000/11/19 01:05:16	1.15
  +++ thread.c	2000/12/31 18:48:03	1.16
  @@ -58,8 +58,6 @@
   {
       (*new) = (apr_threadattr_t *)apr_palloc(cont, 
                 sizeof(apr_threadattr_t));
  -    (*new)->attr = (int32)apr_palloc(cont, 
  -                    sizeof(int32));
   
       if ((*new) == NULL) {
           return APR_ENOMEM;
  @@ -98,11 +96,6 @@
       
       (*new) = (apr_thread_t *)apr_palloc(cont, sizeof(apr_thread_t));
       if ((*new) == NULL) {
  -        return APR_ENOMEM;
  -    }
  -
  -	(*new)->td = (thread_id) apr_palloc(cont, sizeof(thread_id));
  -    if ((*new)->td == (thread_id)NULL) {
           return APR_ENOMEM;
       }