Another and easy approach would be if the class NetworkListWorker receive again 
a const DirItemInfo *parent, but sets m_parent as its own instance using the 
operator '=', in this case it never gets deleted outside the worker thread.

Suppose the code changed:


NetworkListWorker::NetworkListWorker(LocationItemDirIterator * dirIterator,
                                     DirItemInfo * mainItemInfo, 
                                     const DirItemInfo *parent) :
    DirListWorker(dirIterator->path(),
                  dirIterator->filters(),
                  dirIterator->flags() == QDirIterator::Subdirectories ? true : 
false),
    m_dirIterator(dirIterator),
    m_mainItemInfo(mainItemInfo),
    m_parent(0)
{
     if (parent != 0)
     {
        m_parent = new UrlItemInfo();  // UrlItemInfo is for remote
        *m_parent = *parent;           // not sure it works, needs be reviewed
     }
     mLoaderType =  NetworkLoader;
     
     // this would not be necessary and can be removed
     parent->connectDestructionSignal(this, SLOT(onParentDestroyed()));
}


NetworkListWorker::~NetworkListWorker()
{
    delete m_dirIterator;
    delete m_mainItemInfo;
    if (m_parent != 0)
    {
       delete  m_parent;
    }
}
-- 
https://code.launchpad.net/~renatofilho/ubuntu-filemanager-app/fix-network-crash/+merge/314870
Your team Ubuntu File Manager Developers is subscribed to branch 
lp:ubuntu-filemanager-app.

-- 
Mailing list: https://launchpad.net/~ubuntu-touch-coreapps-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~ubuntu-touch-coreapps-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to