]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Fixed file locking on Linux
authorkan <kan@opencascade.com>
Wed, 21 Dec 2011 16:28:59 +0000 (16:28 +0000)
committerkan <kan@opencascade.com>
Wed, 21 Dec 2011 16:28:59 +0000 (16:28 +0000)
src/LightApp/LightApp_Driver.cxx
src/LightApp/LightApp_Driver.h
src/SUIT/SUIT_Session.cxx
src/SUIT/SUIT_Session.h

index 3508c2021e68ba5ba05b603c812ac65e333371e7..eb42e2d33b5b512f51a809dbfd3a585e2c1cacad 100644 (file)
@@ -252,21 +252,22 @@ void LightApp_Driver::SetListOfFiles( const char* theModuleName, const ListOfFil
 
 #ifndef WIN32
   fName += ".fcntl";
+
+  if ( myBlocFcntl )
+    fclose( myBlocFcntl );
   myBlocFcntl = fopen( fName.toLatin1().constData(), "w" );
-#endif
   lockFcntl( QString() );
+#endif
 
 }
 
+#ifndef WIN32
 /*
  * Lock theLF or myBlockFcntl if empty
  * returns 0 on success
  */
 int LightApp_Driver::lockFcntl( QString theLF )
 {
-#ifdef WIN32
-  return 0;
-#else
   if ( theLF.isEmpty() && !myBlocFcntl )
     return -2;
 
@@ -282,10 +283,8 @@ int LightApp_Driver::lockFcntl( QString theLF )
   fLock.l_len = 0;
   fLock.l_start = 0;
   return fcntl( fileno( aFD ), F_SETLK, &fLock );
-#endif
-
 }
-
+#endif
 
 /*!
   Remove files. First item in <theFiles> is a directory with slash at the end.
@@ -326,6 +325,12 @@ void LightApp_Driver::RemoveFiles( const ListOfFiles& theFiles, const bool IsDir
     }
     aDir.Remove();
   }
+  //if ( IsDirDeleted )
+  //{
+//    bool ok = Qtx::rmDir( QString( theFiles[0].c_str() ) );
+    // std::cout<<"\n DEBUG: rmdir "<<theFiles[0].c_str()<<" ok: "<<ok<<std::endl;
+  //}
+
 }
 
 /*!
@@ -345,8 +350,22 @@ void LightApp_Driver::RemoveTemporaryFiles( const char* theModuleName, const boo
     QString fName = Qtx::addSlash( aFiles.front().c_str() ) + "used_by_salome";
     QFile::remove( fName );
   }
+#ifndef WIN32
+  if ( myBlocFcntl )
+  {
+    fclose( myBlocFcntl );
+    QString fName = Qtx::addSlash( aFiles.front().c_str() ) + "used_by_salome.fcntl";
+    QFile::remove( fName );
+  }
+#endif
 
   RemoveFiles( aFiles, IsDirDeleted );
+
+  // if ( IsDirDeleted )
+  // {
+  //   bool ok = Qtx::rmDir( QString( aFiles[0].c_str() ) );
+  //   std::cout<<"\n DEBUG: rmdir "<<aFiles[0].c_str()<<" ok: "<<std::endl;
+  // }
 }
 
 /*!
@@ -436,11 +455,8 @@ std::string LightApp_Driver::GetTmpDir()
   if ( myBlocFcntl )
     fclose( myBlocFcntl );
   myBlocFcntl = fopen( blocName.toLatin1().constData(), "w" );
-#endif
   lockFcntl( QString() );
-
-
-  
+#endif  
   return aTmpDir.ToCString();
 }
 
index 1928bf9508a86501121adf5f8e5347f53aa63214..25d4842bed7ea983a1f6d099cd751f057b59a285 100644 (file)
@@ -83,8 +83,9 @@ protected:
 
   void                SetIsTemporary( bool theFlag ) { myIsTemp = theFlag; }
   bool                IsTemporary() const { return myIsTemp; }
-  
+#ifndef WIN32  
   int                 lockFcntl( QString theLF );
+#endif
 
 protected:
   typedef std::map<std::string, ListOfFiles> MapOfListOfFiles;
index 5a822a31094444878133411d46ae50230dd76fb8..e12db29cfc36165eee7ecfbc0ebfcd09161ff087 100755 (executable)
@@ -27,6 +27,8 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <cerrno>
+
+#include <iostream>
 #endif
 
 #include "SUIT_Study.h"
@@ -537,20 +539,18 @@ void SUIT_Session::createBackupTimer()
 #ifndef WIN32
     used += ".fcntl";
     myBFileFcntl = fopen( used.toLatin1().constData(), "w" );
-#endif
     lockFcntl( QString() );
+#endif
   }
 }
 
+#ifndef WIN32
 /*
  * Lock theLF or myBFileFcntl if empty
  * returns 0 on success
  */
 int SUIT_Session::lockFcntl( QString theLF )
 {
-#ifdef WIN32
-  return 0;
-#else
   if ( theLF.isEmpty() && !myBFileFcntl )
     return -2;
 
@@ -579,8 +579,14 @@ void SUIT_Session::onBTimer()
   QApplication::setOverrideCursor( Qt::WaitCursor );
 
   // clear folder
-  Qtx::rmDir( myBFolder );
-  QDir().mkdir( myBFolder );
+  QDir tmpDir( myBFolder );
+  QFileInfoList aFolders = tmpDir.entryInfoList( QDir::Dirs|QDir::NoDotAndDotDot );
+  
+  QFileInfoList::const_iterator aFoldersIt = aFolders.constBegin();
+  for ( ; aFoldersIt != aFolders.constEnd(); ++aFoldersIt )
+  {
+    Qtx::rmDir( (*aFoldersIt).absoluteFilePath() );
+  }
   
   // create backup
   QString aName;
index c0df6792c4c7361bbae7c82409173b0226140a21..a9b4e9b48270dc2ee45a44e268b6bb07f0b1a39f 100755 (executable)
@@ -99,7 +99,9 @@ private:
   void                          createBackupTimer();
   void                          restoreBackup();
   void                          removeTmpFiles();
+#ifndef WIN32
   int                           lockFcntl( QString theLF );
+#endif
 
 private:
   typedef QList<SUIT_Application*> AppList;