Update of /cvsroot/mahogany/M/src/classes
In directory sc8-pr-cvs1:/tmp/cvs-serv18801/src/classes
Modified Files:
MObject.cpp
Log Message:
Resolved cyclic ref counting in LineBook and brought WeakRef to usable state
Index: MObject.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/classes/MObject.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -b -u -2 -r1.29 -r1.30
--- MObject.cpp 11 Oct 2003 17:02:37 -0000 1.29
+++ MObject.cpp 16 Oct 2003 10:29:23 -0000 1.30
@@ -28,4 +28,5 @@
#include "MObject.h"
+#include "pointers.h"
#ifdef DEBUG
@@ -97,5 +98,5 @@
gs_aObjects.Add(this);
m_nRef = 1;
- m_weak = 0;
+ m_weakRef = 0;
}
@@ -127,5 +128,7 @@
{
gs_aObjects.Remove(this);
- delete this;
+ this->~MObjectRC();
+ if( !m_weakRef )
+ ::operator delete(this);
return FALSE;
@@ -174,29 +177,30 @@
}
-class WeakRefCounter : public MObjectRC
+extern void WeakRefIncrement(MObjectRC *pointer)
{
-public:
- WeakRefCounter() : m_deleted(false) {}
- bool m_deleted;
-};
+ if( pointer )
+ ++pointer->m_weakRef;
+}
-extern WeakRefCounter *WeakRefAdd(MObjectRC *pointer)
+extern void WeakRefDecrement(MObjectRC *pointer)
{
- if( !pointer->m_weak )
- pointer->m_weak = new WeakRefCounter;
- else
- pointer->m_weak->IncRef();
-
- return pointer->m_weak;
+ if( pointer )
+ {
+ --pointer->m_weakRef;
+ if( !pointer->m_weakRef && !pointer->m_nRef )
+ {
+ ::operator delete(pointer);
+ }
+ }
}
-extern void WeakRefRemove(WeakRefCounter *counter)
+extern void WeakRefAssign(MObjectRC *target,MObjectRC *source)
{
- counter->DecRef();
+ WeakRefIncrement(source);
+ WeakRefDecrement(target);
}
-extern void WeakRefDeleted(WeakRefCounter *counter)
+extern bool WeakRefExpired(const MObjectRC *pointer)
{
- if( counter )
- counter->m_deleted = true;
+ return pointer->m_nRef == 0;
}
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates