void Node::_flushObjects() { ClientPtr client = getClient(); { lunchbox::ScopedMutex<> mutex( _barriers ); for( BarrierHash::const_iterator i =_barriers->begin(); i != _barriers->end(); ++ i ) { co::Barrier* barrier = i->second; client->unmapObject( barrier ); delete barrier; } _barriers->clear(); } lunchbox::ScopedMutex<> mutex( _frameDatas ); LBASSERT( _frameDatas->empty( )); for( FrameDataHashCIter i = _frameDatas->begin(); i != _frameDatas->end(); ++i ) { FrameDataPtr frameData = i->second; client->unmapObject( frameData.get( )); } _frameDatas->clear(); }
void Pipe::flushFrames( ObjectManager* om ) { LB_TS_THREAD( _pipeThread ); ClientPtr client = getClient(); for( FrameHashCIter i = _impl->frames.begin(); i !=_impl->frames.end(); ++i) { Frame* frame = i->second; frame->setFrameData( 0 ); // datas are flushed below client->unmapObject( frame ); delete frame; } _impl->frames.clear(); for( FrameDataHashCIter i = _impl->inputFrameDatas.begin(); i != _impl->inputFrameDatas.end(); ++i ) { FrameDataPtr data = i->second; data->deleteGLObjects( om ); } _impl->inputFrameDatas.clear(); for( FrameDataHashCIter i = _impl->outputFrameDatas.begin(); i != _impl->outputFrameDatas.end(); ++i ) { FrameDataPtr data = i->second; data->resetPlugins(); data->deleteGLObjects( om ); client->unmapObject( data.get( )); getNode()->releaseFrameData( data ); } _impl->outputFrameDatas.clear(); }
void Pipe::_releaseViews() { LB_TS_THREAD( _pipeThread ); for( bool changed = true; changed; ) { changed = false; for( ViewHashIter i =_impl->views.begin(); i !=_impl->views.end(); ++i ) { View* view = i->second; view->commit(); if( view->getVersion() + 20 > view->getHeadVersion( )) continue; // release unused view to avoid memory leaks due to deltas piling up view->_pipe = 0; ClientPtr client = getClient(); client->unmapObject( view ); _impl->views.erase( i ); NodeFactory* nodeFactory = Global::getNodeFactory(); nodeFactory->releaseView( view ); changed = true; break; } } }
void Pipe::_flushQueues() { LB_TS_THREAD( _pipeThread ); ClientPtr client = getClient(); for( QueueHashCIter i = _impl->queues.begin(); i !=_impl->queues.end(); ++i) { co::QueueSlave* queue = i->second; client->unmapObject( queue ); delete queue; } _impl->queues.clear(); }
void Pipe::_flushViews() { LB_TS_THREAD( _pipeThread ); NodeFactory* nodeFactory = Global::getNodeFactory(); ClientPtr client = getClient(); for( ViewHashCIter i = _impl->views.begin(); i != _impl->views.end(); ++i ) { View* view = i->second; client->unmapObject( view ); view->_pipe = 0; nodeFactory->releaseView( view ); } _impl->views.clear(); }
void Node::_flushObjects() { ClientPtr client = getClient(); { lunchbox::ScopedMutex<> mutex( _impl->barriers ); for( BarrierHash::const_iterator i = _impl->barriers->begin(); i != _impl->barriers->end(); ++i ) { delete i->second; } _impl->barriers->clear(); } lunchbox::ScopedMutex<> mutex( _impl->frameDatas ); for( FrameDataHashCIter i = _impl->frameDatas->begin(); i != _impl->frameDatas->end(); ++i ) { FrameDataPtr frameData = i->second; frameData->resetPlugins(); client->unmapObject( frameData.get( )); } _impl->frameDatas->clear(); }