Explorar o código

HPCC-11253 Do not lock superfiles in roxie

Fix closedown issues with dalayedReleaser thread.

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman %!s(int64=11) %!d(string=hai) anos
pai
achega
5df8e1c413
Modificáronse 3 ficheiros con 22 adicións e 2 borrados
  1. 2 0
      roxie/ccd/ccdmain.cpp
  2. 17 2
      roxie/ccd/ccdstate.cpp
  3. 3 0
      roxie/ccd/ccdstate.hpp

+ 2 - 0
roxie/ccd/ccdmain.cpp

@@ -923,6 +923,7 @@ int STARTQUERY_API start_query(int argc, const char *argv[])
 
         setDaliServixSocketCaching(true);  // enable daliservix caching
         loadPlugins();
+        createDelayedReleaser();
         globalPackageSetManager = createRoxiePackageSetManager(standAloneDll.getClear());
         globalPackageSetManager->load();
         unsigned snifferChannel = numChannels+2; // MORE - why +2 not +1 ??
@@ -1047,6 +1048,7 @@ int STARTQUERY_API start_query(int argc, const char *argv[])
     stopPerformanceMonitor();
     ::Release(globalPackageSetManager);
     globalPackageSetManager = NULL;
+    stopDelayedReleaser();
     cleanupPlugins();
     closeMulticastSockets();
     releaseSlaveDynamicFileCache();

+ 17 - 2
roxie/ccd/ccdstate.cpp

@@ -172,7 +172,22 @@ public:
         }
         queue.append(*new DelayedReleaseQueueItem(_goer, delaySeconds));
     }
-} delayedReleaser;
+};
+
+Owned<DelayedReleaserThread> delayedReleaser;
+
+void createDelayedReleaser()
+{
+    delayedReleaser.setown(new DelayedReleaserThread);
+}
+
+void stopDelayedReleaser()
+{
+    if (delayedReleaser)
+        delayedReleaser->stop();
+    delayedReleaser.clear();
+}
+
 
 //-------------------------------------------------------------------------
 
@@ -1237,7 +1252,7 @@ protected:
             queryHash = newHash;
         }
         if (slaveQueryReleaseDelaySeconds)
-            delayedReleaser.delayedRelease(oldSlaveManagers.getClear(), slaveQueryReleaseDelaySeconds);
+            delayedReleaser->delayedRelease(oldSlaveManagers.getClear(), slaveQueryReleaseDelaySeconds);
     }
 
     mutable CriticalSection updateCrit;  // protects updates of slaveManagers and serverManager

+ 3 - 0
roxie/ccd/ccdstate.hpp

@@ -143,4 +143,7 @@ extern void mergeQueries(IPropertyTree *s1, IPropertyTree *s2);
 extern const char *queryNodeFileName(const IPropertyTree &graphNode);
 extern const char *queryNodeIndexName(const IPropertyTree &graphNode);
 
+extern void createDelayedReleaser();
+extern void stopDelayedReleaser();
+
 #endif