From 252ca95cfc8ca331cb8b1db2dda793b725f8c72f Mon Sep 17 00:00:00 2001 From: "kin%netscape.com" Date: Thu, 3 Jun 1999 15:26:48 +0000 Subject: [PATCH] Enabled LOCK/UNLOCK macros. git-svn-id: svn://10.0.0.236/trunk@33524 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/editor/txmgr/src/makefile.win | 8 ++-- .../editor/txmgr/src/nsTransactionManager.cpp | 46 ++++++++++++++++--- .../editor/txmgr/src/nsTransactionManager.h | 6 +++ 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/mozilla/editor/txmgr/src/makefile.win b/mozilla/editor/txmgr/src/makefile.win index 277afb56718..3169554ba8a 100644 --- a/mozilla/editor/txmgr/src/makefile.win +++ b/mozilla/editor/txmgr/src/makefile.win @@ -43,9 +43,6 @@ LINCS=-I$(PUBLIC)\xpcom \ -I$(PUBLIC)\base \ -I$(PUBLIC)\raptor -LLIBS= \ - $(DIST)\lib\xpcom.lib - MAKE_OBJ_TYPE = DLL DLLNAME = txmgr DLL=.\$(OBJDIR)\$(DLLNAME).dll @@ -59,7 +56,10 @@ LCFLAGS = \ $(NULL) # These are the libraries we need to link with to create the dll -LLIBS=$(DIST)\lib\xpcom.lib +LLIBS = \ + $(DIST)\lib\xpcom.lib \ + $(LIBNSPR) \ + $(NULL) !if "$(MOZ_BITS)"=="32" && defined(MOZ_DEBUG) && defined(GLOWCODE) LLIBS=$(LLIBS) $(GLOWDIR)\glowcode.lib diff --git a/mozilla/editor/txmgr/src/nsTransactionManager.cpp b/mozilla/editor/txmgr/src/nsTransactionManager.cpp index 4e428927902..9004d2a4119 100644 --- a/mozilla/editor/txmgr/src/nsTransactionManager.cpp +++ b/mozilla/editor/txmgr/src/nsTransactionManager.cpp @@ -27,8 +27,8 @@ #include "nsCOMPtr.h" -#define LOCK_TX_MANAGER(mgr) -#define UNLOCK_TX_MANAGER(mgr) +#define LOCK_TX_MANAGER(mgr) (mgr)->Lock() +#define UNLOCK_TX_MANAGER(mgr) (mgr)->Unlock() static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kITransactionManagerIID, NS_ITRANSACTIONMANAGER_IID); @@ -37,6 +37,8 @@ nsTransactionManager::nsTransactionManager(PRInt32 aMaxTransactionCount) : mMaxTransactionCount(aMaxTransactionCount), mListeners(0) { mRefCnt = 0; + + mMonitor = ::PR_NewMonitor(); } nsTransactionManager::~nsTransactionManager() @@ -55,6 +57,12 @@ nsTransactionManager::~nsTransactionManager() delete mListeners; mListeners = 0; } + + if (mMonitor) + { + ::PR_DestroyMonitor(mMonitor); + mMonitor = 0; + } } #ifdef DEBUG_TXMGR_REFCNT @@ -652,8 +660,13 @@ nsTransactionManager::RemoveListener(nsITransactionListener *aListener) if (!mListeners) return NS_ERROR_FAILURE; + LOCK_TX_MANAGER(this); + if (!mListeners->RemoveElement((void *)aListener)) + { + UNLOCK_TX_MANAGER(this); return NS_ERROR_FAILURE; + } NS_IF_RELEASE(aListener); @@ -663,6 +676,8 @@ nsTransactionManager::RemoveListener(nsITransactionListener *aListener) mListeners = 0; } + UNLOCK_TX_MANAGER(this); + return NS_OK; } @@ -1127,14 +1142,15 @@ nsTransactionManager::EndTransaction() if (result != NS_COMFALSE) { result = topTransaction->Merge(&didMerge, tint); + nsresult result2 = DidMergeNotify(topTransaction, tint, didMerge, result); + + if (NS_SUCCEEDED(result)) + result = result2; + if (NS_FAILED(result)) { // XXX: What do we do if this fails? } - nsresult result2 = DidMergeNotify(topTransaction, tint, didMerge, result); - - // XXX: What do we do if this fails? - if (didMerge) { delete tx; return result; @@ -1173,3 +1189,21 @@ nsTransactionManager::EndTransaction() return result; } +nsresult +nsTransactionManager::Lock() +{ + if (mMonitor) + PR_EnterMonitor(mMonitor); + + return NS_OK; +} + +nsresult +nsTransactionManager::Unlock() +{ + if (mMonitor) + PR_ExitMonitor(mMonitor); + + return NS_OK; +} + diff --git a/mozilla/editor/txmgr/src/nsTransactionManager.h b/mozilla/editor/txmgr/src/nsTransactionManager.h index f8fd185e813..cd906d5f2a0 100644 --- a/mozilla/editor/txmgr/src/nsTransactionManager.h +++ b/mozilla/editor/txmgr/src/nsTransactionManager.h @@ -19,6 +19,8 @@ #ifndef nsTransactionManager_h__ #define nsTransactionManager_h__ +#include "prmon.h" + class nsITransaction; class nsITransactionManager; class nsITransactionListener; @@ -40,6 +42,8 @@ private: nsTransactionRedoStack mRedoStack; nsVoidArray *mListeners; + PRMonitor *mMonitor; + public: /** The default constructor. @@ -95,6 +99,8 @@ private: /* nsTransactionManager specific private methods. */ virtual nsresult BeginTransaction(nsITransaction *aTransaction); virtual nsresult EndTransaction(void); + virtual nsresult Lock(void); + virtual nsresult Unlock(void); }; #endif // nsTransactionManager_h__