[rhmessaging-commits] rhmessaging commits: r1503 - store/trunk/cpp/lib/jrnl.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Mon Dec 17 13:49:24 EST 2007
Author: kpvdr
Date: 2007-12-17 13:49:24 -0500 (Mon, 17 Dec 2007)
New Revision: 1503
Modified:
store/trunk/cpp/lib/jrnl/jcntl.cpp
store/trunk/cpp/lib/jrnl/jcntl.hpp
Log:
Added separate mutex for jcntl::get_wr_events(), which was previoiusly deadlocking on the write mutex.
Modified: store/trunk/cpp/lib/jrnl/jcntl.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-12-17 16:45:58 UTC (rev 1502)
+++ store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-12-17 18:49:24 UTC (rev 1503)
@@ -73,7 +73,8 @@
_wmgr(this, _emap, _tmap, _wrfc),
_rcvdat(_num_jfiles)
{
- pthread_mutex_init(&_mutex, NULL);
+ pthread_mutex_init(&_wr_mutex, NULL);
+ pthread_mutex_init(&_gev_mutex, NULL);
}
jcntl::~jcntl()
@@ -88,7 +89,8 @@
::delete _datafh[i];
::delete[] _datafh;
}
- pthread_mutex_destroy(&_mutex);
+ pthread_mutex_destroy(&_gev_mutex);
+ pthread_mutex_destroy(&_wr_mutex);
}
void
@@ -209,7 +211,7 @@
{
check_wstatus("enqueue_data_record");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.enqueue(data_buff, tot_data_len, this_data_len, dtokp, NULL,
0, transient, false), r));
@@ -222,7 +224,7 @@
{
check_wstatus("enqueue_extern_data_record");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.enqueue(NULL, tot_data_len, 0, dtokp, NULL, 0, transient,
true), r));
@@ -237,7 +239,7 @@
{
check_wstatus("enqueue_tx_data_record");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.enqueue(data_buff, tot_data_len, this_data_len, dtokp,
xid.data(), xid.size(), transient, false), r));
@@ -251,7 +253,7 @@
{
check_wstatus("enqueue_extern_txn_data_record");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.enqueue(NULL, tot_data_len, 0, dtokp, xid.data(), xid.size(),
transient, true), r));
@@ -287,7 +289,7 @@
{
check_wstatus("dequeue_data");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.dequeue(dtokp, NULL, 0), r));
return r;
@@ -299,7 +301,7 @@
{
check_wstatus("dequeue_data");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.dequeue(dtokp, xid.data(), xid.size()), r));
return r;
@@ -311,7 +313,7 @@
{
check_wstatus("txn_abort");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.abort(dtokp, xid.data(), xid.size()), r));
return r;
@@ -323,7 +325,7 @@
{
check_wstatus("txn_commit");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
iores r;
while (handle_aio_wait(_wmgr.commit(dtokp, xid.data(), xid.size()), r));
return r;
@@ -339,7 +341,7 @@
const u_int32_t
jcntl::get_wr_events()
{
- stlock t(&_mutex);
+ stlock t(&_gev_mutex);
if (t.locked())
return _wmgr.get_events(pmgr::UNUSED);
return 0;
@@ -375,7 +377,7 @@
if (_readonly_flag)
throw jexception(jerrno::JERR_JCNTL_READONLY, "jcntl", "flush");
{
- slock s(&_mutex);
+ slock s(&_wr_mutex);
return _wmgr.flush();
}
}
Modified: store/trunk/cpp/lib/jrnl/jcntl.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-12-17 16:45:58 UTC (rev 1502)
+++ store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-12-17 18:49:24 UTC (rev 1503)
@@ -139,7 +139,8 @@
rmgr _rmgr; ///< Read page manager which manages AIO
wmgr _wmgr; ///< Write page manager which manages AIO
rcvdat _rcvdat; ///< Recovery data used for recovery
- pthread_mutex_t _mutex; ///< Mutex for thread safety
+ pthread_mutex_t _wr_mutex; ///< Mutex for journal writes
+ pthread_mutex_t _gev_mutex; ///< Mutex for get_events
public:
/**
More information about the rhmessaging-commits
mailing list