void DeleteThreadFunc(OperThreadNode *node) { try { MutexLock lock(node->GetMutex()); if (!node->Data()) return; OperCFData *data = ((OperCFData*)node->Data()); OperCFThread thread("Delete", data->Parent(), node); FSPtr fs = data->srcFs; FSPath path = data->srcPath; cptr<FSList> list = data->srcList; lock.Unlock();//!!! try { if (list.ptr()) thread.DeleteList(fs.Ptr(), path, *(list.ptr())); } catch (cexception *ex) { lock.Lock(); //!!! if (!node->NBStopped()) //обязательно надо проверить, иначе 'data' может быть неактуальной { data->errorString = ex->message(); } ex->destroy(); } } catch (cexception *ex) { fprintf(stderr, "ERR!!! Error exception in DeleteThreadFunc - '%s'\n", ex->message()); ex->destroy(); } catch (...) { fprintf(stderr, "ERR!!! Unhandled exception in DeleteThreadFunc\n"); } }
void MkDirThreadFunc(OperThreadNode *node) { try { MutexLock lock(node->GetMutex()); if (!node->Data()) return; OperCFData *data = ((OperCFData*)node->Data()); OperCFThread thread("create directory", data->Parent(), node); FSPtr fs = data->srcFs; FSPath path = data->srcPath; lock.Unlock();//!!! try { thread.CreateDirectory(fs.Ptr(), path); } catch (cexception *ex) { lock.Lock(); //!!! if (!node->NBStopped()) //обязательно надо проверить, иначе 'data' может быть неактуальной { data->errorString = ex->message(); } ex->destroy(); } } catch (cexception *ex) { fprintf(stderr, "ERR!!! Error exception in MkDirThreadFunc - '%s'\n", ex->message()); ex->destroy(); } catch (...) { fprintf(stderr, "ERR!!! Unhandled exception in MkDirThreadFunc\n"); } }
void CopyThreadFunc( OperThreadNode* node ) { try { MutexLock lock( node->GetMutex() ); if ( !node->Data() ) { return; } OperCFData* data = ( ( OperCFData* )node->Data() ); OperCFThread thread( "Copy", data->Parent(), node ); clPtr<FS> srcFs = data->srcFs; FSPath srcPath = data->srcPath; clPtr<FS> destFs = data->destFs; FSPath destPath = data->destPath; clPtr<FSList> list = data->srcList; lock.Unlock();//!!! try { clPtr<cstrhash<bool, unicode_t> > resList = new cstrhash<bool, unicode_t>; thread.Copy( srcFs.Ptr(), srcPath, list.ptr(), destFs.Ptr(), destPath, *( resList.ptr() ) ); lock.Lock(); //!!! if ( !node->NBStopped() ) { data->resList = resList; data->executed = true; } } catch ( cexception* ex ) { lock.Lock(); //!!! if ( !node->NBStopped() ) //обязательно надо проверить, иначе 'data' может быть неактуальной { data->errorString = ex->message(); } ex->destroy(); } } catch ( cexception* ex ) { fprintf( stderr, "ERR!!! Error exception in CopyThreadFunc - '%s'\n", ex->message() ); ex->destroy(); } catch ( ... ) { fprintf( stderr, "ERR!!! Unhandled exception in CopyThreadFunc\n" ); } }