Esempio n. 1
0
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();
}
Esempio n. 2
0
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();
}
Esempio n. 3
0
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;
        }
    }
}
Esempio n. 4
0
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();
}
Esempio n. 5
0
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();
}
Esempio n. 6
0
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();
}