Update of /cvsroot/libufo/ufo-0.5/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15244/src
Modified Files:
uabstractdisplay.cpp
Log Message:
Fixed deletion of volatile data objects.
Index: uabstractdisplay.cpp
===================================================================
RCS file: /cvsroot/libufo/ufo-0.5/src/uabstractdisplay.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** uabstractdisplay.cpp 5 Jul 2005 11:29:19 -0000 1.15
--- uabstractdisplay.cpp 18 Aug 2005 18:05:20 -0000 1.16
***************
*** 68,71 ****
--- 68,77 ----
setDefault(NULL);
}
+ // unreference volatile data
+ for(std::list<UVolatileData*>::iterator iter = m_volatileData.begin();
+ iter != m_volatileData.end();
+ ++iter) {
+ (*iter)->unreference();
+ }
}
***************
*** 280,286 ****
break;
case UEvent::Refresh: {
! for(std::list<UVolatileData*>::iterator iter = m_volatileData.begin();
! iter != m_volatileData.end(); ++iter) {
! (*iter)->refresh();
}
}
--- 286,309 ----
break;
case UEvent::Refresh: {
! // refresh volatile data and remove unused data
! for(std::list<UVolatileData*>::iterator next_iter, iter = m_volatileData.begin();
! iter != m_volatileData.end();
! iter = next_iter) {
! next_iter = iter;
! ++next_iter;
! if ((*iter)->getReferenceCount() == 1) {
! // this object is ready for deletion
! (*iter)->unreference();
! m_volatileData.erase(iter);
! } else {
! (*iter)->refresh();
! }
! }
! // refresh contexts
! std::vector<UContext*> contexts = getContexts();
! for(std::vector<UContext*>::iterator citer = contexts.begin();
! citer != contexts.end();
! ++citer) {
! (*citer)->refresh();
}
}
|