Index: ext/libicpf/src/dmutex.cpp
===================================================================
diff -u -N -r2a38ed9af6573b03e881ecf726fab6a3746f8cfd -rd4269744a04d36c8a8146a84bc27118031fa42ac
--- ext/libicpf/src/dmutex.cpp	(.../dmutex.cpp)	(revision 2a38ed9af6573b03e881ecf726fab6a3746f8cfd)
+++ ext/libicpf/src/dmutex.cpp	(.../dmutex.cpp)	(revision d4269744a04d36c8a8146a84bc27118031fa42ac)
@@ -7,38 +7,34 @@
 ///////////////////////////////////////////////////////////////
 // debuggable mutex
 
+/// Static dump context
+dumpctx* d_mutex::m_pContext=NULL;
+
 /** Constructs an unnamed mutex with a given dump context which will receive
  *  notifications about locking and unlocking of this mutex.
- *
- * \param[in] pctx - dump context that will receive notifications about lock/unlock
  */
-d_mutex::d_mutex(dumpctx* pctx)
-	: mutex(pctx),
+d_mutex::d_mutex() :
+	mutex(),
 	m_ulLockCount(0)
 {
 	const char_t* psz="Unnamed";
 	m_pszName=new char_t[strlen(psz)+1];
 	strcpy(m_pszName, psz);
 
-	m_pContext=pctx;
-
 	m_ulLockCount=0;
 }
 
 /** Constructs a named mutex with a given dump context which will receive
  *  notifications about locking and unlocking of this mutex.
  *
  * \param[in] pszStr - name of this mutex (will be used for logging purposes)
- * \param[in] pctx - dump context that will receive notifications about lock/unlock
  */
-d_mutex::d_mutex(const char_t* pszStr, dumpctx* pctx) :
-	mutex(pszStr, pctx),
+d_mutex::d_mutex(const char_t* pszStr) :
+	mutex(pszStr),
 	m_ulLockCount(0)
 {
 	m_pszName=new char_t[strlen(pszStr)+1];
 	strcpy(m_pszName, pszStr);
-
-	m_pContext=pctx;
 }
 
 /** Destructs the object
@@ -59,6 +55,8 @@
 {
 	assert(m_pContext);
 
+	((mutex*)this)->lock();
+
 	m_ulLockCount++;
 
 	// log the attempt and lock it
@@ -67,8 +65,6 @@
 
 	m_pContext->open(sz);
 	m_pContext->close();
-
-	((mutex*)this)->lock();
 }
 
 /** Unlocks this mutex. Takes some parameters that should identify the place in code which