[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