summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-11-25 09:20:35 +0000
committerrubidium <rubidium@openttd.org>2013-11-25 09:20:35 +0000
commit43edd2409e62ef90c86c227893e04d1197bc8766 (patch)
tree46d39baba97b8c839064202f627b02d2086cadf6
parentee0aa389a8523a44475d192100b21b2f9b413082 (diff)
downloadopenttd-43edd2409e62ef90c86c227893e04d1197bc8766.tar.xz
(svn r26098) -Fix: close the log file when OpenTTD was forked and finally closed
-rw-r--r--src/dedicated.cpp13
-rw-r--r--src/openttd.cpp7
2 files changed, 13 insertions, 7 deletions
diff --git a/src/dedicated.cpp b/src/dedicated.cpp
index 83c6c1d21..6342bc247 100644
--- a/src/dedicated.cpp
+++ b/src/dedicated.cpp
@@ -13,7 +13,8 @@
#ifdef ENABLE_NETWORK
-char *_log_file; ///< File to reroute output of a forked OpenTTD to
+char *_log_file = NULL; ///< File to reroute output of a forked OpenTTD to
+FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to
#if defined(UNIX) && !defined(__MORPHOS__)
@@ -39,20 +40,18 @@ void DedicatedFork()
exit(1);
case 0: { // We're the child
- FILE *f;
-
/* Open the log-file to log all stuff too */
- f = fopen(_log_file, "a");
- if (f == NULL) {
+ _log_fd = fopen(_log_file, "a");
+ if (_log_fd == NULL) {
perror("Unable to open logfile");
exit(1);
}
/* Redirect stdout and stderr to log-file */
- if (dup2(fileno(f), fileno(stdout)) == -1) {
+ if (dup2(fileno(_log_fd), fileno(stdout)) == -1) {
perror("Rerouting stdout");
exit(1);
}
- if (dup2(fileno(f), fileno(stderr)) == -1) {
+ if (dup2(fileno(_log_fd), fileno(stderr)) == -1) {
perror("Rerouting stderr");
exit(1);
}
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 4f099cfa1..ba6989765 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -907,6 +907,13 @@ exit_normal:
free(_ini_videodriver);
free(_ini_blitter);
+#ifdef ENABLE_NETWORK
+ extern FILE *_log_fd;
+ if (_log_fd != NULL) {
+ fclose(_log_fd);
+ }
+#endif /* ENABLE_NETWORK */
+
return ret;
}