Esempio n. 1
0
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");
	}
}
Esempio n. 2
0
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");
	}
}
Esempio n. 3
0
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" );
	}
}