You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/07/02 02:37:33 UTC

svn commit: r1142133 - /subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c

Author: stefan2
Date: Sat Jul  2 00:37:32 2011
New Revision: 1142133

URL: http://svn.apache.org/viewvc?rev=1142133&view=rev
Log:
Replace usage of plain APR thread mutex API with the new svn_mutex
API in FS loader.

* subversion/libsvn_fs/fs-loader.c
  (common_pool_lock): switch to svn_mutex__t
  (acquire_fs_mutex, release_fs_mutex, get_library_vtable_direct, 
   uninit, svn_fs_initialize, svn_fs_create, svn_fs_open, svn_fs_upgrade,
   svn_fs_pack, svn_fs_recover, svn_fs_create_berkeley, svn_fs_open_berkeley):
   switch to svn_mutex API

Modified:
    subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c

Modified: subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c?rev=1142133&r1=1142132&r2=1142133&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_fs/fs-loader.c Sat Jul  2 00:37:32 2011
@@ -42,6 +42,7 @@
 #include "private/svn_fs_private.h"
 #include "private/svn_fs_util.h"
 #include "private/svn_utf_private.h"
+#include "private/svn_mutex.h"
 
 #include "fs-loader.h"
 #include "svn_hash.h"
@@ -57,9 +58,7 @@
 /* A pool common to all FS objects.  See the documentation on the
    open/create functions in fs-loader.h and for svn_fs_initialize(). */
 static apr_pool_t *common_pool;
-#if APR_HAS_THREADS
-static apr_thread_mutex_t *common_pool_lock;
-#endif
+svn_mutex__t common_pool_lock;
 
 
 /* --- Utility functions for the loader --- */
@@ -126,25 +125,13 @@ load_module(fs_init_func_t *initfunc, co
 static svn_error_t *
 acquire_fs_mutex(void)
 {
-#if APR_HAS_THREADS
-  apr_status_t status;
-  status = apr_thread_mutex_lock(common_pool_lock);
-  if (status)
-    return svn_error_wrap_apr(status, _("Can't grab FS mutex"));
-#endif
-  return SVN_NO_ERROR;
+  return svn_mutex__lock(common_pool_lock);
 }
 
 static svn_error_t *
-release_fs_mutex(void)
+release_fs_mutex(svn_error_t *err)
 {
-#if APR_HAS_THREADS
-  apr_status_t status;
-  status = apr_thread_mutex_unlock(common_pool_lock);
-  if (status)
-    return svn_error_wrap_apr(status, _("Can't ungrab FS mutex"));
-#endif
-  return SVN_NO_ERROR;
+  return svn_mutex__unlock(common_pool_lock, err);
 }
 
 /* Fetch a library vtable by a pointer into the library definitions array. */
@@ -168,7 +155,6 @@ get_library_vtable_direct(fs_library_vta
 
   {
     svn_error_t *err;
-    svn_error_t *err2;
 
     /* Per our API compatibility rules, we cannot ensure that
        svn_fs_initialize is called by the application.  If not, we
@@ -184,14 +170,7 @@ get_library_vtable_direct(fs_library_vta
        pool protected by a lock. */
     SVN_ERR(acquire_fs_mutex());
     err = initfunc(my_version, vtable, common_pool);
-    err2 = release_fs_mutex();
-    if (err)
-      {
-        svn_error_clear(err2);
-        return err;
-      }
-    if (err2)
-      return err2;
+    SVN_ERR(release_fs_mutex(err));
   }
   fs_version = (*vtable)->get_version();
   if (!svn_ver_equal(my_version, fs_version))
@@ -289,30 +268,18 @@ write_fs_type(const char *path, const ch
 static apr_status_t uninit(void *data)
 {
   common_pool = NULL;
-#if APR_HAS_THREADS
-  common_pool_lock = NULL;
-#endif
   return APR_SUCCESS;
 }
 
 svn_error_t *
 svn_fs_initialize(apr_pool_t *pool)
 {
-#if APR_HAS_THREADS
-  apr_status_t status;
-#endif
-
   /* Protect against multiple calls. */
   if (common_pool)
     return SVN_NO_ERROR;
 
   common_pool = svn_pool_create(pool);
-#if APR_HAS_THREADS
-  status = apr_thread_mutex_create(&common_pool_lock,
-                                   APR_THREAD_MUTEX_DEFAULT, common_pool);
-  if (status)
-    return svn_error_wrap_apr(status, _("Can't allocate FS mutex"));
-#endif
+  SVN_ERR(svn_mutex__init(&common_pool_lock, TRUE, common_pool));
 
   /* ### This won't work if POOL is NULL and libsvn_fs is loaded as a DSO
      ### (via libsvn_ra_local say) since the global common_pool will live
@@ -392,7 +359,6 @@ svn_fs_create(svn_fs_t **fs_p, const cha
               apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
 
   const char *fs_type = svn_hash__get_cstring(fs_config,
@@ -408,13 +374,7 @@ svn_fs_create(svn_fs_t **fs_p, const cha
   *fs_p = fs_new(fs_config, pool);
   SVN_ERR(acquire_fs_mutex());
   err = vtable->create(*fs_p, path, pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 svn_error_t *
@@ -422,27 +382,19 @@ svn_fs_open(svn_fs_t **fs_p, const char 
             apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
 
   SVN_ERR(fs_library_vtable(&vtable, path, pool));
   *fs_p = fs_new(fs_config, pool);
   SVN_ERR(acquire_fs_mutex());
   err = vtable->open_fs(*fs_p, path, pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 svn_error_t *
 svn_fs_upgrade(const char *path, apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
   svn_fs_t *fs;
 
@@ -450,13 +402,7 @@ svn_fs_upgrade(const char *path, apr_poo
   fs = fs_new(NULL, pool);
   SVN_ERR(acquire_fs_mutex());
   err = vtable->upgrade_fs(fs, path, pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 const char *
@@ -496,7 +442,6 @@ svn_fs_pack(const char *path,
             apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
   svn_fs_t *fs;
 
@@ -505,13 +450,7 @@ svn_fs_pack(const char *path,
   SVN_ERR(acquire_fs_mutex());
   err = vtable->pack_fs(fs, path, notify_func, notify_baton,
                         cancel_func, cancel_baton, pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 svn_error_t *
@@ -520,7 +459,6 @@ svn_fs_recover(const char *path,
                apr_pool_t *pool)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
   svn_fs_t *fs;
 
@@ -528,15 +466,10 @@ svn_fs_recover(const char *path,
   fs = fs_new(NULL, pool);
   SVN_ERR(acquire_fs_mutex());
   err = vtable->open_fs_for_recovery(fs, path, pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  if (! err2)
-    err2 = vtable->recover(fs, cancel_func, cancel_baton, pool);
-  return svn_error_trace(err2);
+  err = release_fs_mutex(err);
+  if (! err)
+    err = vtable->recover(fs, cancel_func, cancel_baton, pool);
+  return svn_error_trace(err);
 }
 
 
@@ -546,7 +479,6 @@ svn_error_t *
 svn_fs_create_berkeley(svn_fs_t *fs, const char *path)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
 
   SVN_ERR(get_library_vtable(&vtable, SVN_FS_TYPE_BDB, fs->pool));
@@ -558,32 +490,19 @@ svn_fs_create_berkeley(svn_fs_t *fs, con
   /* Perform the actual creation. */
   SVN_ERR(acquire_fs_mutex());
   err = vtable->create(fs, path, fs->pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 svn_error_t *
 svn_fs_open_berkeley(svn_fs_t *fs, const char *path)
 {
   svn_error_t *err;
-  svn_error_t *err2;
   fs_library_vtable_t *vtable;
 
   SVN_ERR(fs_library_vtable(&vtable, path, fs->pool));
   SVN_ERR(acquire_fs_mutex());
   err = vtable->open_fs(fs, path, fs->pool, common_pool);
-  err2 = release_fs_mutex();
-  if (err)
-    {
-      svn_error_clear(err2);
-      return svn_error_trace(err);
-    }
-  return svn_error_trace(err2);
+  return svn_error_trace(release_fs_mutex(err));
 }
 
 const char *