apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Darroch <chr...@pearsoncmg.com>
Subject [PATCH] proc_mutex causes core dump
Date Thu, 22 Aug 2002 19:41:21 GMT
Hi --

    I happened to discover that calling apr_global_mutex_trylock()
caused a core dump (I'm using Solaris 8, but that doesn't really
matter here).  It's because line 917 in the apr_proc_mutex_trylock()
function in apr/locks/unix/proc_mutex.c calls:

mutex->meth->tryacquire(mutex)

but the tryacquire function pointer is, for all cases, set to NULL.
A quick fix, without actually implementing any of the tryacquire
functions, is below; APR_ENOTIMPL is returned by stub functions instead.

    I'll follow this up with a patch that tries to implement
the proc_pthreads tryacquire case ... but since I'm only just
reading man pages now, I really can't be sure I've got it correct.

Chris.

===========================================================

--- proc_mutex.c.orig	2002-08-22 14:04:12.259144000 -0400
+++ proc_mutex.c	2002-08-22 14:57:15.826790000 -0400
@@ -138,6 +138,11 @@
      return APR_SUCCESS;
  }

+static apr_status_t proc_mutex_posix_tryacquire(apr_proc_mutex_t *mutex)
+{
+    return APR_ENOTIMPL;
+}
+
  static apr_status_t proc_mutex_posix_release(apr_proc_mutex_t *mutex)
  {
      int rc;
@@ -176,7 +181,7 @@
  #endif
      proc_mutex_posix_create,
      proc_mutex_posix_acquire,
-    NULL, /* no tryacquire */
+    proc_mutex_posix_tryacquire,
      proc_mutex_posix_release,
      proc_mutex_posix_destroy,
      proc_mutex_posix_child_init,
@@ -253,6 +258,11 @@
      return APR_SUCCESS;
  }

+static apr_status_t proc_mutex_sysv_tryacquire(apr_proc_mutex_t *mutex)
+{
+    return APR_ENOTIMPL;
+}
+
  static apr_status_t proc_mutex_sysv_release(apr_proc_mutex_t *mutex)
  {
      int rc;
@@ -292,7 +302,7 @@
  #endif
      proc_mutex_sysv_create,
      proc_mutex_sysv_acquire,
-    NULL, /* no tryacquire */
+    proc_mutex_sysv_tryacquire,
      proc_mutex_sysv_release,
      proc_mutex_sysv_destroy,
      proc_mutex_sysv_child_init,
@@ -427,7 +437,14 @@
      return APR_SUCCESS;
  }

-/* TODO: Add proc_mutex_proc_pthread_tryacquire(apr_proc_mutex_t *mutex) */
+static apr_status_t proc_mutex_proc_pthread_tryacquire(apr_proc_mutex_t 
*mutex)
+{
+    apr_status_t rv;
+
+    /**** DEBUG ****/
+
+    return APR_ENOTIMPL;
+}

  static apr_status_t proc_mutex_proc_pthread_release(apr_proc_mutex_t 
*mutex)
  {
@@ -467,7 +484,7 @@
      APR_PROCESS_LOCK_MECH_IS_GLOBAL,
      proc_mutex_proc_pthread_create,
      proc_mutex_proc_pthread_acquire,
-    NULL, /* no tryacquire */
+    proc_mutex_proc_pthread_tryacquire,
      proc_mutex_proc_pthread_release,
      proc_mutex_proc_pthread_destroy,
      proc_mutex_proc_pthread_child_init,
@@ -563,6 +580,11 @@
      return APR_SUCCESS;
  }

+static apr_status_t proc_mutex_fcntl_tryacquire(apr_proc_mutex_t *mutex)
+{
+    return APR_ENOTIMPL;
+}
+
  static apr_status_t proc_mutex_fcntl_release(apr_proc_mutex_t *mutex)
  {
      int rc;
@@ -603,7 +625,7 @@
  #endif
      proc_mutex_fcntl_create,
      proc_mutex_fcntl_acquire,
-    NULL, /* no tryacquire */
+    proc_mutex_fcntl_tryacquire,
      proc_mutex_fcntl_release,
      proc_mutex_fcntl_destroy,
      proc_mutex_fcntl_child_init,
@@ -678,6 +700,11 @@
      return APR_SUCCESS;
  }

+static apr_status_t proc_mutex_flock_tryacquire(apr_proc_mutex_t *mutex)
+{
+    return APR_ENOTIMPL;
+}
+
  static apr_status_t proc_mutex_flock_release(apr_proc_mutex_t *mutex)
  {
      int rc;
@@ -733,7 +760,7 @@
  #endif
      proc_mutex_flock_create,
      proc_mutex_flock_acquire,
-    NULL, /* no tryacquire */
+    proc_mutex_flock_tryacquire,
      proc_mutex_flock_release,
      proc_mutex_flock_destroy,
      proc_mutex_flock_child_init,


Mime
View raw message