Browse Source

Stop and restart the Prometheus worker thread when daemonizing

Also use _Exit() instead of returning from main() to avoid duplicate
cleanup/flusing/etc.
Chris Spiegel 1 month ago
parent
commit
f231561276
2 changed files with 15 additions and 1 deletions
  1. 10 0
      ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h
  2. 5 1
      one.cpp

+ 10 - 0
ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h

@@ -50,6 +50,16 @@ namespace prometheus {
   public:
     SaveToFile() = default;
 
+    void stop() {
+      must_die = true;
+      worker_thread.join();
+    }
+
+    void restart() {
+      must_die = false;
+      worker_thread = std::thread(&SaveToFile::worker_function, this);
+    }
+
     ~SaveToFile() {
       must_die = true;
       worker_thread.join();

+ 5 - 1
one.cpp

@@ -2330,14 +2330,18 @@ int main(int argc, char** argv)
 	}
 #endif	 // !ZT_ONE_NO_ROOT_CHECK
 	if (runAsDaemon) {
+		prometheus::simpleapi::saver.stop();
+
 		long p = (long)fork();
 		if (p < 0) {
 			fprintf(stderr, "%s: could not fork" ZT_EOL_S, argv[0]);
 			return 1;
 		}
 		else if (p > 0)
-			return 0;	// forked
+			_Exit(0);	// forked
 						// else p == 0, so we are daemonized
+
+		prometheus::simpleapi::saver.restart();
 	}
 #endif	 // __UNIX_LIKE__