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:27:28 UTC

svn commit: r1142130 - in /subversion/branches/svn_mutex/subversion/libsvn_fs_fs: fs.c fs.h fs_fs.c

Author: stefan2
Date: Sat Jul  2 00:27:28 2011
New Revision: 1142130

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

* subversion/libsvn_fs_fs/fs.h
  (fs_fs_shared_data_t): use svn_mutex instead of plain apr mutexes
* subversion/libsvn_fs_fs/fs_fs.c
  (with_txnlist_lock, with_some_lock, svn_fs_fs__with_write_lock,
   with_txn_current_lock): switch to svn_mutex API
* subversion/libsvn_fs_fs/fs.c
  (fs_serialized_init): dito

Modified:
    subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
    subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
    subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c

Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c Sat Jul  2 00:27:28 2011
@@ -89,29 +89,12 @@ fs_serialized_init(svn_fs_t *fs, apr_poo
       /* POSIX fcntl locks are per-process, so we need a mutex for
          intra-process synchronization when grabbing the repository write
          lock. */
-      status = apr_thread_mutex_create(&ffsd->fs_write_lock,
-                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
-      if (status)
-        return svn_error_wrap_apr(status,
-                                  _("Can't create FSFS write-lock mutex"));
+      SVN_ERR(svn_mutex__init(&ffsd->fs_write_lock, TRUE, common_pool));
 
       /* ... not to mention locking the txn-current file. */
-      status = apr_thread_mutex_create(&ffsd->txn_current_lock,
-                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
-      if (status)
-        return svn_error_wrap_apr(status,
-                                  _("Can't create FSFS txn-current mutex"));
+      SVN_ERR(svn_mutex__init(&ffsd->txn_current_lock, TRUE, common_pool));
 #endif
-#if APR_HAS_THREADS
-      /* We also need a mutex for synchronising access to the active
-         transaction list and free transaction pointer. */
-      status = apr_thread_mutex_create(&ffsd->txn_list_lock,
-                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
-      if (status)
-        return svn_error_wrap_apr(status,
-                                  _("Can't create FSFS txn list mutex"));
-#endif
-
+      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
 
       key = apr_pstrdup(common_pool, key);
       status = apr_pool_userdata_set(ffsd, key, NULL, common_pool);

Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h?rev=1142130&r1=1142129&r2=1142130&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h Sat Jul  2 00:27:28 2011
@@ -34,6 +34,7 @@
 #include "private/svn_cache.h"
 #include "private/svn_fs_private.h"
 #include "private/svn_sqlite.h"
+#include "private/svn_mutex.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -182,18 +183,16 @@ typedef struct fs_fs_shared_data_t
      Access to this object is synchronised under TXN_LIST_LOCK. */
   fs_fs_shared_txn_data_t *free_txn;
 
-#if APR_HAS_THREADS
   /* A lock for intra-process synchronization when accessing the TXNS list. */
-  apr_thread_mutex_t *txn_list_lock;
-#endif
+  svn_mutex__t txn_list_lock;
 #if SVN_FS_FS__USE_LOCK_MUTEX
   /* A lock for intra-process synchronization when grabbing the
      repository write lock. */
-  apr_thread_mutex_t *fs_write_lock;
+  svn_mutex__t fs_write_lock;
 
   /* A lock for intra-process synchronization when locking the
      txn-current file. */
-  apr_thread_mutex_t *txn_current_lock;
+  svn_mutex__t txn_current_lock;
 #endif
 
   /* The common pool, under which this object is allocated, subpools

Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c Sat Jul  2 00:27:28 2011
@@ -511,25 +511,14 @@ with_txnlist_lock(svn_fs_t *fs,
                   apr_pool_t *pool)
 {
   svn_error_t *err;
-#if APR_HAS_THREADS
   fs_fs_data_t *ffd = fs->fsap_data;
   fs_fs_shared_data_t *ffsd = ffd->shared;
-  apr_status_t apr_err;
 
-  apr_err = apr_thread_mutex_lock(ffsd->txn_list_lock);
-  if (apr_err)
-    return svn_error_wrap_apr(apr_err, _("Can't grab FSFS txn list mutex"));
-#endif
+  SVN_ERR(svn_mutex__lock(ffsd->txn_list_lock));
 
   err = body(fs, baton, pool);
 
-#if APR_HAS_THREADS
-  apr_err = apr_thread_mutex_unlock(ffsd->txn_list_lock);
-  if (apr_err && !err)
-    return svn_error_wrap_apr(apr_err, _("Can't ungrab FSFS txn list mutex"));
-#endif
-
-  return svn_error_trace(err);
+  return svn_error_trace(svn_mutex__unlock(ffsd->txn_list_lock, err));
 }
 
 
@@ -565,7 +554,7 @@ with_some_lock(svn_fs_t *fs,
                void *baton,
                const char *lock_filename,
 #if SVN_FS_FS__USE_LOCK_MUTEX
-               apr_thread_mutex_t *lock_mutex,
+               svn_mutex__t lock_mutex,
 #endif
                apr_pool_t *pool)
 {
@@ -573,15 +562,7 @@ with_some_lock(svn_fs_t *fs,
   svn_error_t *err;
 
 #if SVN_FS_FS__USE_LOCK_MUTEX
-  apr_status_t status;
-
-  /* POSIX fcntl locks are per-process, so we need to serialize locks
-     within the process. */
-  status = apr_thread_mutex_lock(lock_mutex);
-  if (status)
-    return svn_error_wrap_apr(status,
-                              _("Can't grab FSFS mutex for '%s'"),
-                              lock_filename);
+  SVN_ERR(svn_mutex__lock(lock_mutex));
 #endif
 
   err = get_lock_on_filesystem(lock_filename, subpool);
@@ -602,15 +583,7 @@ with_some_lock(svn_fs_t *fs,
 
   svn_pool_destroy(subpool);
 
-#if SVN_FS_FS__USE_LOCK_MUTEX
-  status = apr_thread_mutex_unlock(lock_mutex);
-  if (status && !err)
-    return svn_error_wrap_apr(status,
-                              _("Can't ungrab FSFS mutex for '%s'"),
-                              lock_filename);
-#endif
-
-  return svn_error_trace(err);
+  return svn_error_trace(svn_mutex__unlock(lock_mutex, err));
 }
 
 svn_error_t *
@@ -623,13 +596,12 @@ svn_fs_fs__with_write_lock(svn_fs_t *fs,
 #if SVN_FS_FS__USE_LOCK_MUTEX
   fs_fs_data_t *ffd = fs->fsap_data;
   fs_fs_shared_data_t *ffsd = ffd->shared;
-  apr_thread_mutex_t *mutex = ffsd->fs_write_lock;
 #endif
 
   return with_some_lock(fs, body, baton,
                         path_lock(fs, pool),
 #if SVN_FS_FS__USE_LOCK_MUTEX
-                        mutex,
+                        ffsd->fs_write_lock,
 #endif
                         pool);
 }
@@ -646,13 +618,12 @@ with_txn_current_lock(svn_fs_t *fs,
 #if SVN_FS_FS__USE_LOCK_MUTEX
   fs_fs_data_t *ffd = fs->fsap_data;
   fs_fs_shared_data_t *ffsd = ffd->shared;
-  apr_thread_mutex_t *mutex = ffsd->txn_current_lock;
 #endif
 
   return with_some_lock(fs, body, baton,
                         path_txn_current_lock(fs, pool),
 #if SVN_FS_FS__USE_LOCK_MUTEX
-                        mutex,
+                        ffsd->txn_current_lock,
 #endif
                         pool);
 }



Re: svn commit: r1142130 - in /subversion/branches/svn_mutex/subversion/libsvn_fs_fs: fs.c fs.h fs_fs.c

Posted by Stefan Fuhrmann <eq...@web.de>.
On 02.07.2011 04:35, Blair Zajac wrote:
>
> On Jul 1, 2011, at 5:27 PM, stefan2@apache.org wrote:
>
>> Author: stefan2
>> Date: Sat Jul  2 00:27:28 2011
>> New Revision: 1142130
>>
>> URL: http://svn.apache.org/viewvc?rev=1142130&view=rev
>> Log:
>> Replace usage of plain APR thread mutex API with the new svn_mutex
>> API in FSFS.
>
>> -#if APR_HAS_THREADS
>> -      /* We also need a mutex for synchronising access to the active
>> -         transaction list and free transaction pointer. */
>> -      status = apr_thread_mutex_create(&ffsd->txn_list_lock,
>> -                                       APR_THREAD_MUTEX_DEFAULT, 
>> common_pool);
>> -      if (status)
>> -        return svn_error_wrap_apr(status,
>> -                                  _("Can't create FSFS txn list 
>> mutex"));
>> -#endif
>> -
>> +      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, 
>> common_pool));
>
> I don't get why you have enable_mutex.  On a platform without thread 
> support, svn_mutex__init with TRUE will always return APR_ENOTIMPL.  
> The proper fix is to wrap APR_HAS_THREAD around it:
>
> #if APR_HAS_THREADS
> SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
> #endif
>
> but that seems like unnecessary work.  I would rather see this
>
> SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, common_pool));
>
> and the mutex will behave with or without locking automatically.
>
> Finally, looking at svn_mutex__init's implementation, I would state 
> that the wrapped pointer will always either be NULL or a valid 
> pointer, since you always set it to 0.

No, the reason behind the flag is its usage in APIs like
svn_cache__create_inprocess() where the caller can
decide whether a synchronization is necessary for a
given instance. If it won't be used from multiple threads,
the implementation will simply avoid the mutex overhead.

-- Stefan^2.

Re: svn commit: r1142130 - in /subversion/branches/svn_mutex/subversion/libsvn_fs_fs: fs.c fs.h fs_fs.c

Posted by Blair Zajac <bl...@orcaware.com>.
On Jul 1, 2011, at 5:27 PM, stefan2@apache.org wrote:

> Author: stefan2
> Date: Sat Jul  2 00:27:28 2011
> New Revision: 1142130
>
> URL: http://svn.apache.org/viewvc?rev=1142130&view=rev
> Log:
> Replace usage of plain APR thread mutex API with the new svn_mutex
> API in FSFS.

> -#if APR_HAS_THREADS
> -      /* We also need a mutex for synchronising access to the active
> -         transaction list and free transaction pointer. */
> -      status = apr_thread_mutex_create(&ffsd->txn_list_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT,  
> common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS txn list  
> mutex"));
> -#endif
> -
> +      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE,  
> common_pool));

I don't get why you have enable_mutex.  On a platform without thread  
support, svn_mutex__init with TRUE will always return APR_ENOTIMPL.   
The proper fix is to wrap APR_HAS_THREAD around it:

#if APR_HAS_THREADS
SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
#endif

but that seems like unnecessary work.  I would rather see this

SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, common_pool));

and the mutex will behave with or without locking automatically.

Finally, looking at svn_mutex__init's implementation, I would state  
that the wrapped pointer will always either be NULL or a valid  
pointer, since you always set it to 0.

Blair


Re: svn commit: r1142130 - in /subversion/branches/svn_mutex/subversion/libsvn_fs_fs: fs.c fs.h fs_fs.c

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, Jul 02, 2011 at 00:27:28 -0000:
> Author: stefan2
> Date: Sat Jul  2 00:27:28 2011
> New Revision: 1142130
> 
> URL: http://svn.apache.org/viewvc?rev=1142130&view=rev
> Log:
> Replace usage of plain APR thread mutex API with the new svn_mutex
> API in FSFS.
> 
> * subversion/libsvn_fs_fs/fs.h
>   (fs_fs_shared_data_t): use svn_mutex instead of plain apr mutexes
> * subversion/libsvn_fs_fs/fs_fs.c
>   (with_txnlist_lock, with_some_lock, svn_fs_fs__with_write_lock,
>    with_txn_current_lock): switch to svn_mutex API
> * subversion/libsvn_fs_fs/fs.c
>   (fs_serialized_init): dito
> 
> Modified:
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c Sat Jul  2 00:27:28 2011
> @@ -89,29 +89,12 @@ fs_serialized_init(svn_fs_t *fs, apr_poo
>        /* POSIX fcntl locks are per-process, so we need a mutex for
>           intra-process synchronization when grabbing the repository write
>           lock. */
> -      status = apr_thread_mutex_create(&ffsd->fs_write_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS write-lock mutex"));
> +      SVN_ERR(svn_mutex__init(&ffsd->fs_write_lock, TRUE, common_pool));
>  
>        /* ... not to mention locking the txn-current file. */
> -      status = apr_thread_mutex_create(&ffsd->txn_current_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS txn-current mutex"));
> +      SVN_ERR(svn_mutex__init(&ffsd->txn_current_lock, TRUE, common_pool));
>  #endif
> -#if APR_HAS_THREADS
> -      /* We also need a mutex for synchronising access to the active
> -         transaction list and free transaction pointer. */
> -      status = apr_thread_mutex_create(&ffsd->txn_list_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS txn list mutex"));
> -#endif
> -
> +      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
>  

#ifdef SVN_FS_FS__USE_LOCK_MUTEX
      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
#else
      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, FALSE, common_pool));
#endif

?


>        key = apr_pstrdup(common_pool, key);
>        status = apr_pool_userdata_set(ffsd, key, NULL, common_pool);
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h Sat Jul  2 00:27:28 2011
> @@ -34,6 +34,7 @@
>  #include "private/svn_cache.h"
>  #include "private/svn_fs_private.h"
>  #include "private/svn_sqlite.h"
> +#include "private/svn_mutex.h"
>  
>  #ifdef __cplusplus
>  extern "C" {
> @@ -182,18 +183,16 @@ typedef struct fs_fs_shared_data_t
>       Access to this object is synchronised under TXN_LIST_LOCK. */
>    fs_fs_shared_txn_data_t *free_txn;
>  
> -#if APR_HAS_THREADS
>    /* A lock for intra-process synchronization when accessing the TXNS list. */
> -  apr_thread_mutex_t *txn_list_lock;
> -#endif
> +  svn_mutex__t txn_list_lock;
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    /* A lock for intra-process synchronization when grabbing the
>       repository write lock. */
> -  apr_thread_mutex_t *fs_write_lock;
> +  svn_mutex__t fs_write_lock;
>  
>    /* A lock for intra-process synchronization when locking the
>       txn-current file. */
> -  apr_thread_mutex_t *txn_current_lock;
> +  svn_mutex__t txn_current_lock;
>  #endif
>  
>    /* The common pool, under which this object is allocated, subpools
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c Sat Jul  2 00:27:28 2011
> @@ -511,25 +511,14 @@ with_txnlist_lock(svn_fs_t *fs,
>                    apr_pool_t *pool)
>  {
>    svn_error_t *err;
> -#if APR_HAS_THREADS
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_status_t apr_err;
>  
> -  apr_err = apr_thread_mutex_lock(ffsd->txn_list_lock);
> -  if (apr_err)
> -    return svn_error_wrap_apr(apr_err, _("Can't grab FSFS txn list mutex"));
> -#endif
> +  SVN_ERR(svn_mutex__lock(ffsd->txn_list_lock));
>  
>    err = body(fs, baton, pool);
>  
> -#if APR_HAS_THREADS
> -  apr_err = apr_thread_mutex_unlock(ffsd->txn_list_lock);
> -  if (apr_err && !err)
> -    return svn_error_wrap_apr(apr_err, _("Can't ungrab FSFS txn list mutex"));
> -#endif
> -
> -  return svn_error_trace(err);
> +  return svn_error_trace(svn_mutex__unlock(ffsd->txn_list_lock, err));
>  }
>  
>  
> @@ -565,7 +554,7 @@ with_some_lock(svn_fs_t *fs,
>                 void *baton,
>                 const char *lock_filename,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -               apr_thread_mutex_t *lock_mutex,
> +               svn_mutex__t lock_mutex,
>  #endif
>                 apr_pool_t *pool)
>  {
> @@ -573,15 +562,7 @@ with_some_lock(svn_fs_t *fs,
>    svn_error_t *err;
>  
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -  apr_status_t status;
> -
> -  /* POSIX fcntl locks are per-process, so we need to serialize locks
> -     within the process. */
> -  status = apr_thread_mutex_lock(lock_mutex);
> -  if (status)
> -    return svn_error_wrap_apr(status,
> -                              _("Can't grab FSFS mutex for '%s'"),
> -                              lock_filename);
> +  SVN_ERR(svn_mutex__lock(lock_mutex));
>  #endif
>  
>    err = get_lock_on_filesystem(lock_filename, subpool);
> @@ -602,15 +583,7 @@ with_some_lock(svn_fs_t *fs,
>  
>    svn_pool_destroy(subpool);
>  
> -#if SVN_FS_FS__USE_LOCK_MUTEX
> -  status = apr_thread_mutex_unlock(lock_mutex);
> -  if (status && !err)
> -    return svn_error_wrap_apr(status,
> -                              _("Can't ungrab FSFS mutex for '%s'"),
> -                              lock_filename);
> -#endif
> -
> -  return svn_error_trace(err);
> +  return svn_error_trace(svn_mutex__unlock(lock_mutex, err));
>  }
>  
>  svn_error_t *
> @@ -623,13 +596,12 @@ svn_fs_fs__with_write_lock(svn_fs_t *fs,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_thread_mutex_t *mutex = ffsd->fs_write_lock;
>  #endif
>  
>    return with_some_lock(fs, body, baton,
>                          path_lock(fs, pool),
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -                        mutex,
> +                        ffsd->fs_write_lock,
>  #endif
>                          pool);
>  }
> @@ -646,13 +618,12 @@ with_txn_current_lock(svn_fs_t *fs,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_thread_mutex_t *mutex = ffsd->txn_current_lock;
>  #endif
>  
>    return with_some_lock(fs, body, baton,
>                          path_txn_current_lock(fs, pool),
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -                        mutex,
> +                        ffsd->txn_current_lock,
>  #endif
>                          pool);
>  }
> 
> 

Re: svn commit: r1142130 - in /subversion/branches/svn_mutex/subversion/libsvn_fs_fs: fs.c fs.h fs_fs.c

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, Jul 02, 2011 at 00:27:28 -0000:
> Author: stefan2
> Date: Sat Jul  2 00:27:28 2011
> New Revision: 1142130
> 
> URL: http://svn.apache.org/viewvc?rev=1142130&view=rev
> Log:
> Replace usage of plain APR thread mutex API with the new svn_mutex
> API in FSFS.
> 
> * subversion/libsvn_fs_fs/fs.h
>   (fs_fs_shared_data_t): use svn_mutex instead of plain apr mutexes
> * subversion/libsvn_fs_fs/fs_fs.c
>   (with_txnlist_lock, with_some_lock, svn_fs_fs__with_write_lock,
>    with_txn_current_lock): switch to svn_mutex API
> * subversion/libsvn_fs_fs/fs.c
>   (fs_serialized_init): dito
> 
> Modified:
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
>     subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.c Sat Jul  2 00:27:28 2011
> @@ -89,29 +89,12 @@ fs_serialized_init(svn_fs_t *fs, apr_poo
>        /* POSIX fcntl locks are per-process, so we need a mutex for
>           intra-process synchronization when grabbing the repository write
>           lock. */
> -      status = apr_thread_mutex_create(&ffsd->fs_write_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS write-lock mutex"));
> +      SVN_ERR(svn_mutex__init(&ffsd->fs_write_lock, TRUE, common_pool));
>  
>        /* ... not to mention locking the txn-current file. */
> -      status = apr_thread_mutex_create(&ffsd->txn_current_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS txn-current mutex"));
> +      SVN_ERR(svn_mutex__init(&ffsd->txn_current_lock, TRUE, common_pool));
>  #endif
> -#if APR_HAS_THREADS
> -      /* We also need a mutex for synchronising access to the active
> -         transaction list and free transaction pointer. */
> -      status = apr_thread_mutex_create(&ffsd->txn_list_lock,
> -                                       APR_THREAD_MUTEX_DEFAULT, common_pool);
> -      if (status)
> -        return svn_error_wrap_apr(status,
> -                                  _("Can't create FSFS txn list mutex"));
> -#endif
> -
> +      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
>  

#ifdef SVN_FS_FS__USE_LOCK_MUTEX
      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, TRUE, common_pool));
#else
      SVN_ERR(svn_mutex__init(&ffsd->txn_list_lock, FALSE, common_pool));
#endif

?


>        key = apr_pstrdup(common_pool, key);
>        status = apr_pool_userdata_set(ffsd, key, NULL, common_pool);
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs.h Sat Jul  2 00:27:28 2011
> @@ -34,6 +34,7 @@
>  #include "private/svn_cache.h"
>  #include "private/svn_fs_private.h"
>  #include "private/svn_sqlite.h"
> +#include "private/svn_mutex.h"
>  
>  #ifdef __cplusplus
>  extern "C" {
> @@ -182,18 +183,16 @@ typedef struct fs_fs_shared_data_t
>       Access to this object is synchronised under TXN_LIST_LOCK. */
>    fs_fs_shared_txn_data_t *free_txn;
>  
> -#if APR_HAS_THREADS
>    /* A lock for intra-process synchronization when accessing the TXNS list. */
> -  apr_thread_mutex_t *txn_list_lock;
> -#endif
> +  svn_mutex__t txn_list_lock;
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    /* A lock for intra-process synchronization when grabbing the
>       repository write lock. */
> -  apr_thread_mutex_t *fs_write_lock;
> +  svn_mutex__t fs_write_lock;
>  
>    /* A lock for intra-process synchronization when locking the
>       txn-current file. */
> -  apr_thread_mutex_t *txn_current_lock;
> +  svn_mutex__t txn_current_lock;
>  #endif
>  
>    /* The common pool, under which this object is allocated, subpools
> 
> Modified: subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c?rev=1142130&r1=1142129&r2=1142130&view=diff
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c (original)
> +++ subversion/branches/svn_mutex/subversion/libsvn_fs_fs/fs_fs.c Sat Jul  2 00:27:28 2011
> @@ -511,25 +511,14 @@ with_txnlist_lock(svn_fs_t *fs,
>                    apr_pool_t *pool)
>  {
>    svn_error_t *err;
> -#if APR_HAS_THREADS
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_status_t apr_err;
>  
> -  apr_err = apr_thread_mutex_lock(ffsd->txn_list_lock);
> -  if (apr_err)
> -    return svn_error_wrap_apr(apr_err, _("Can't grab FSFS txn list mutex"));
> -#endif
> +  SVN_ERR(svn_mutex__lock(ffsd->txn_list_lock));
>  
>    err = body(fs, baton, pool);
>  
> -#if APR_HAS_THREADS
> -  apr_err = apr_thread_mutex_unlock(ffsd->txn_list_lock);
> -  if (apr_err && !err)
> -    return svn_error_wrap_apr(apr_err, _("Can't ungrab FSFS txn list mutex"));
> -#endif
> -
> -  return svn_error_trace(err);
> +  return svn_error_trace(svn_mutex__unlock(ffsd->txn_list_lock, err));
>  }
>  
>  
> @@ -565,7 +554,7 @@ with_some_lock(svn_fs_t *fs,
>                 void *baton,
>                 const char *lock_filename,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -               apr_thread_mutex_t *lock_mutex,
> +               svn_mutex__t lock_mutex,
>  #endif
>                 apr_pool_t *pool)
>  {
> @@ -573,15 +562,7 @@ with_some_lock(svn_fs_t *fs,
>    svn_error_t *err;
>  
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -  apr_status_t status;
> -
> -  /* POSIX fcntl locks are per-process, so we need to serialize locks
> -     within the process. */
> -  status = apr_thread_mutex_lock(lock_mutex);
> -  if (status)
> -    return svn_error_wrap_apr(status,
> -                              _("Can't grab FSFS mutex for '%s'"),
> -                              lock_filename);
> +  SVN_ERR(svn_mutex__lock(lock_mutex));
>  #endif
>  
>    err = get_lock_on_filesystem(lock_filename, subpool);
> @@ -602,15 +583,7 @@ with_some_lock(svn_fs_t *fs,
>  
>    svn_pool_destroy(subpool);
>  
> -#if SVN_FS_FS__USE_LOCK_MUTEX
> -  status = apr_thread_mutex_unlock(lock_mutex);
> -  if (status && !err)
> -    return svn_error_wrap_apr(status,
> -                              _("Can't ungrab FSFS mutex for '%s'"),
> -                              lock_filename);
> -#endif
> -
> -  return svn_error_trace(err);
> +  return svn_error_trace(svn_mutex__unlock(lock_mutex, err));
>  }
>  
>  svn_error_t *
> @@ -623,13 +596,12 @@ svn_fs_fs__with_write_lock(svn_fs_t *fs,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_thread_mutex_t *mutex = ffsd->fs_write_lock;
>  #endif
>  
>    return with_some_lock(fs, body, baton,
>                          path_lock(fs, pool),
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -                        mutex,
> +                        ffsd->fs_write_lock,
>  #endif
>                          pool);
>  }
> @@ -646,13 +618,12 @@ with_txn_current_lock(svn_fs_t *fs,
>  #if SVN_FS_FS__USE_LOCK_MUTEX
>    fs_fs_data_t *ffd = fs->fsap_data;
>    fs_fs_shared_data_t *ffsd = ffd->shared;
> -  apr_thread_mutex_t *mutex = ffsd->txn_current_lock;
>  #endif
>  
>    return with_some_lock(fs, body, baton,
>                          path_txn_current_lock(fs, pool),
>  #if SVN_FS_FS__USE_LOCK_MUTEX
> -                        mutex,
> +                        ffsd->txn_current_lock,
>  #endif
>                          pool);
>  }
> 
>