diff --git a/src/common/log.c b/src/common/log.c
index f3c7281b1181f1933d647778395f42602f897fdd..3e55501dd71c6dbef93ed67ffa6fb111a797a2a3 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -205,6 +205,13 @@ void close_temp_logs(void)
   }
 }
 
+void mark_logs_temp(void)
+{
+  logfile_t *lf;
+  for (lf = logfiles; lf; lf = lf->next)
+    lf->is_temporary = 1;
+}
+
 /**
  * Add a log handler to send messages to <b>filename</b>. If opening
  * the logfile fails, -1 is returned and errno is set appropriately
diff --git a/src/common/log.h b/src/common/log.h
index 33e42b7d47133fbd39b7fca79b3e2ec139e07634..7ce5ceee0ac6de57b4716fad8d8a08398fa53ee0 100644
--- a/src/common/log.h
+++ b/src/common/log.h
@@ -54,6 +54,7 @@ void close_logs();
 void reset_logs();
 void add_temp_log(void);
 void close_temp_logs(void);
+void mark_logs_temp(void);
 
 /* Outputs a message to stdout */
 void _log(int severity, const char *format, ...) CHECK_PRINTF(2,3);
diff --git a/src/or/main.c b/src/or/main.c
index b63dd1439b0a4cd2f395b0edf5efd0da070a9b2f..7f2c309c01b880c6c8f67a86cf87338c923228e4 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -608,6 +608,7 @@ static int do_hup(void) {
 
   log_fn(LOG_NOTICE,"Received sighup. Reloading config.");
   has_completed_circuit=0;
+  mark_logs_temp(); /* Close current logs once new logs are open. */
   /* first, reload config variables, in case they've changed */
   /* no need to provide argc/v, they've been cached inside init_from_config */
   if (init_from_config(0, NULL) < 0) {