ASF Bugzilla – Attachment 17769 Details for
Bug 38758
process mutex trylock functions for unix
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
adds trylock functions for unix process mutexes
proc_mutex.c.patch (text/plain), 4.88 KB, created by
Chris Darroch
on 2006-02-22 22:36:49 UTC
(
hide
)
Description:
adds trylock functions for unix process mutexes
Filename:
MIME Type:
Creator:
Chris Darroch
Created:
2006-02-22 22:36:49 UTC
Size:
4.88 KB
patch
obsolete
>--- locks/unix/proc_mutex.c 2006-02-22 14:48:34.894051265 -0500 >+++ locks/unix/proc_mutex.c.orig 2005-02-04 15:44:01.000000000 -0500 >@@ -125,18 +125,6 @@ > return APR_SUCCESS; > } > >-static apr_status_t proc_mutex_posix_tryacquire(apr_proc_mutex_t *mutex) >-{ >- if (sem_trywait(mutex->psem_interproc) < 0) { >- if (errno == EAGAIN) { >- return APR_EBUSY; >- } >- return errno; >- } >- mutex->curr_locked = 1; >- return APR_SUCCESS; >-} >- > static apr_status_t proc_mutex_posix_release(apr_proc_mutex_t *mutex) > { > mutex->curr_locked = 0; >@@ -157,7 +145,7 @@ > #endif > proc_mutex_posix_create, > proc_mutex_posix_acquire, >- proc_mutex_posix_tryacquire, >+ proc_mutex_no_tryacquire, > proc_mutex_posix_release, > proc_mutex_posix_cleanup, > proc_mutex_no_child_init, >@@ -169,7 +157,6 @@ > #if APR_HAS_SYSVSEM_SERIALIZE > > static struct sembuf proc_mutex_op_on; >-static struct sembuf proc_mutex_op_try; > static struct sembuf proc_mutex_op_off; > > static void proc_mutex_sysv_setup(void) >@@ -177,9 +164,6 @@ > proc_mutex_op_on.sem_num = 0; > proc_mutex_op_on.sem_op = -1; > proc_mutex_op_on.sem_flg = SEM_UNDO; >- proc_mutex_op_try.sem_num = 0; >- proc_mutex_op_try.sem_op = -1; >- proc_mutex_op_try.sem_flg = SEM_UNDO | IPC_NOWAIT; > proc_mutex_op_off.sem_num = 0; > proc_mutex_op_off.sem_op = 1; > proc_mutex_op_off.sem_flg = SEM_UNDO; >@@ -238,23 +222,6 @@ > return APR_SUCCESS; > } > >-static apr_status_t proc_mutex_sysv_tryacquire(apr_proc_mutex_t *mutex) >-{ >- int rc; >- >- do { >- rc = semop(mutex->interproc->filedes, &proc_mutex_op_try, 1); >- } while (rc < 0 && errno == EINTR); >- if (rc < 0) { >- if (errno == EAGAIN) { >- return APR_EBUSY; >- } >- return errno; >- } >- mutex->curr_locked = 1; >- return APR_SUCCESS; >-} >- > static apr_status_t proc_mutex_sysv_release(apr_proc_mutex_t *mutex) > { > int rc; >@@ -278,7 +245,7 @@ > #endif > proc_mutex_sysv_create, > proc_mutex_sysv_acquire, >- proc_mutex_sysv_tryacquire, >+ proc_mutex_no_tryacquire, > proc_mutex_sysv_release, > proc_mutex_sysv_cleanup, > proc_mutex_no_child_init, >@@ -427,32 +394,7 @@ > return APR_SUCCESS; > } > >-static apr_status_t proc_mutex_proc_pthread_tryacquire(apr_proc_mutex_t *mutex) >-{ >- apr_status_t rv; >- >- if ((rv = pthread_mutex_trylock(mutex->pthread_interproc))) { >-#ifdef PTHREAD_SETS_ERRNO >- rv = errno; >-#endif >- if (rv == EBUSY) { >- return APR_EBUSY; >- } >-#ifdef HAVE_PTHREAD_MUTEXATTR_SETROBUST_NP >- /* Okay, our owner died. Let's try to make it consistent again. */ >- if (rv == EOWNERDEAD) { >- pthread_mutex_consistent_np(mutex->pthread_interproc); >- rv = APR_SUCCESS; >- } >- else >- return rv; >-#else >- return rv; >-#endif >- } >- mutex->curr_locked = 1; >- return rv; >-} >+/* TODO: Add proc_mutex_proc_pthread_tryacquire(apr_proc_mutex_t *mutex) */ > > static apr_status_t proc_mutex_proc_pthread_release(apr_proc_mutex_t *mutex) > { >@@ -473,7 +415,7 @@ > APR_PROCESS_LOCK_MECH_IS_GLOBAL, > proc_mutex_proc_pthread_create, > proc_mutex_proc_pthread_acquire, >- proc_mutex_proc_pthread_tryacquire, >+ proc_mutex_no_tryacquire, > proc_mutex_proc_pthread_release, > proc_mutex_proc_pthread_cleanup, > proc_mutex_no_child_init, >@@ -559,24 +501,7 @@ > if (rc < 0) { > return errno; > } >- mutex->curr_locked = 1; >- return APR_SUCCESS; >-} >- >-static apr_status_t proc_mutex_fcntl_tryacquire(apr_proc_mutex_t *mutex) >-{ >- int rc; >- >- do { >- rc = fcntl(mutex->interproc->filedes, F_SETLK, &proc_mutex_lock_it); >- } while (rc < 0 && errno == EINTR); >- if (rc < 0) { >- if (errno == EAGAIN) { >- return APR_EBUSY; >- } >- return errno; >- } >- mutex->curr_locked = 1; >+ mutex->curr_locked=1; > return APR_SUCCESS; > } > >@@ -603,7 +528,7 @@ > #endif > proc_mutex_fcntl_create, > proc_mutex_fcntl_acquire, >- proc_mutex_fcntl_tryacquire, >+ proc_mutex_no_tryacquire, > proc_mutex_fcntl_release, > proc_mutex_fcntl_cleanup, > proc_mutex_no_child_init, >@@ -677,23 +602,6 @@ > return APR_SUCCESS; > } > >-static apr_status_t proc_mutex_flock_tryacquire(apr_proc_mutex_t *mutex) >-{ >- int rc; >- >- do { >- rc = flock(mutex->interproc->filedes, LOCK_EX | LOCK_NB); >- } while (rc < 0 && errno == EINTR); >- if (rc < 0) { >- if (errno == EWOULDBLOCK) { >- return APR_EBUSY; >- } >- return errno; >- } >- mutex->curr_locked = 1; >- return APR_SUCCESS; >-} >- > static apr_status_t proc_mutex_flock_release(apr_proc_mutex_t *mutex) > { > int rc; >@@ -741,7 +649,7 @@ > #endif > proc_mutex_flock_create, > proc_mutex_flock_acquire, >- proc_mutex_flock_tryacquire, >+ proc_mutex_no_tryacquire, > proc_mutex_flock_release, > proc_mutex_flock_cleanup, > proc_mutex_flock_child_init,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 38758
:
17769
|
17770
|
17771
|
17772
|
17878