[tor-commits] [metrics-db/master] Wait until all threads are done before exiting.

karsten at torproject.org karsten at torproject.org
Sat Oct 27 20:07:46 UTC 2012


commit 0336ad311f7862553cdd8f8b73f056d3a7dc643a
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Fri Oct 26 21:15:14 2012 -0400

    Wait until all threads are done before exiting.
---
 src/org/torproject/ernie/db/main/Main.java |   27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/org/torproject/ernie/db/main/Main.java b/src/org/torproject/ernie/db/main/Main.java
index 88f2372..d1361cf 100644
--- a/src/org/torproject/ernie/db/main/Main.java
+++ b/src/org/torproject/ernie/db/main/Main.java
@@ -2,6 +2,8 @@
  * See LICENSE for licensing information */
 package org.torproject.ernie.db.main;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Logger;
 
 import org.torproject.ernie.db.bridgedescs.SanitizedBridgesWriter;
@@ -34,30 +36,45 @@ public class Main {
       System.exit(1);
     }
 
+    // Keep a list of all threads, so that we can join them all before
+    // exiting.
+    List<Thread> threads = new ArrayList<Thread>();
+
     // Import/download relay descriptors from the various sources
     if (config.getWriteDirectoryArchives()) {
-      new ArchiveWriter(config).start();
+      threads.add(new ArchiveWriter(config));
     }
 
     // Sanitize bridge descriptors
     if (config.getImportBridgeSnapshots() &&
         config.getWriteSanitizedBridges()) {
-      new SanitizedBridgesWriter(config).start();
+      threads.add(new SanitizedBridgesWriter(config));
     }
 
     // Download exit list and store it to disk
     if (config.getDownloadExitList()) {
-      new ExitListDownloader(config).start();
+      threads.add(new ExitListDownloader(config));
     }
 
     // Process bridge pool assignments
     if (config.getProcessBridgePoolAssignments()) {
-      new BridgePoolAssignmentsProcessor(config).start();
+      threads.add(new BridgePoolAssignmentsProcessor(config));
     }
 
     // Process Torperf files
     if (config.getProcessTorperfFiles()) {
-      new TorperfDownloader(config).start();
+      threads.add(new TorperfDownloader(config));
+    }
+
+    // Run threads
+    for (Thread thread : threads) {
+      thread.start();
+    }
+    for (Thread thread : threads) {
+      try {
+        thread.join();
+      } catch (InterruptedException e) {
+      }
     }
 
     // Remove lock file





More information about the tor-commits mailing list