From 809146978c6b85bb00ca2441ef2490441f4a91da Mon Sep 17 00:00:00 2001
From: Jared Adams <jaxad0127@gmail.com>
Date: Mon, 18 Jan 2010 19:36:34 +0000
Subject: Attempt to fix forking problem on platinum

---
 src/char/char.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/char/char.c b/src/char/char.c
index 2b25399..3755d1f 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -16,6 +16,7 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <stdarg.h>
+#include <sys/wait.h>
 
 #include "core.h"
 #include "socket.h"
@@ -114,6 +115,8 @@ int  online_gm_display_min_level = 20;  // minimum GM level to display 'GM' when
 int *online_chars;              // same size of char_dat, and id value of current server (or -1)
 time_t update_online;           // to update online files when we receiving information from a server (not less than 8 seconds)
 
+pid_t pid = 0; // For forked DB writes
+
 //------------------------------
 // Writing function of logs file
 //------------------------------
@@ -828,7 +831,17 @@ void mmo_char_sync (void)
 //----------------------------------------------------
 int mmo_char_sync_timer (int tid, unsigned int tick, int id, int data)
 {
-    pid_t pid;
+    if (pid != 0)
+    {
+        int status;
+        pid_t temp = waitpid (pid, &status, WNOHANG);
+
+        // Need to check status too?
+        if (temp == 0)
+        {
+            return 0;
+        }
+    }
 
     // This can take a lot of time. Fork a child to handle the work and return at once
     // If we're unable to fork just continue running the function normally
-- 
cgit v1.2.3-70-g09d2