]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix bug 44: on HUP, if descriptor building fails (say, because router_get_my_address...
authorNick Mathewson <nickm@torproject.org>
Wed, 23 Mar 2005 20:28:40 +0000 (20:28 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 23 Mar 2005 20:28:40 +0000 (20:28 +0000)
svn:r3839

src/or/main.c

index e2176d4233705817fbee592ae47dddc03f3af07b..b06fc552f046cfd0087c9f6410558c37d8fe4bbd 100644 (file)
@@ -965,16 +965,23 @@ static int do_hup(void) {
   /* Fetch a new directory. Even authdirservers do this. */
   directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 1);
   if (server_mode(options)) {
+    const char *descriptor;
     /* Restart cpuworker and dnsworker processes, so they get up-to-date
      * configuration options. */
     cpuworkers_rotate();
     dnsworkers_rotate();
-    /* Rebuild fresh descriptor. */
+    /* Rebuild fresh descriptor, but leave old one on failure. */
     router_rebuild_descriptor(1);
-    tor_snprintf(keydir,sizeof(keydir),"%s/router.desc", options->DataDirectory);
+    descriptor = router_get_my_descriptor();
+    if (!descriptor) {
+      log_fn(LOG_WARN,"No descriptor to save.");
+      return 0;
+    }
+    tor_snprintf(keydir,sizeof(keydir),"%s/router.desc",
+                 options->DataDirectory);
     log_fn(LOG_INFO,"Saving descriptor to %s...",keydir);
-    if (write_str_to_file(keydir, router_get_my_descriptor(), 0)) {
-      return -1;
+    if (write_str_to_file(keydir, descriptor, 0)) {
+      return 0;
     }
   }
   return 0;