From abe96e3b05a99a984d6f00098f1aa9759814b542 Mon Sep 17 00:00:00 2001 From: Jared Adams 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 #include #include +#include #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