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);
}