summaryrefslogtreecommitdiff
path: root/src/char/char.c
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2010-01-18 19:36:34 +0000
committerMadCamel <madcamel@gmail.com>2010-02-05 01:01:44 -0500
commitcbf63a3ae9087178ae6b6abd88f14726aeb804f6 (patch)
tree523347f6829d710e5f9593e3a0ba61e42aa45921 /src/char/char.c
parentd85546cf432ddb0ab4b1227aad2824ee77d745ac (diff)
downloadtmwa-cbf63a3ae9087178ae6b6abd88f14726aeb804f6.tar.gz
tmwa-cbf63a3ae9087178ae6b6abd88f14726aeb804f6.tar.bz2
tmwa-cbf63a3ae9087178ae6b6abd88f14726aeb804f6.tar.xz
tmwa-cbf63a3ae9087178ae6b6abd88f14726aeb804f6.zip
Attempt to fix forking problem on platinum
Diffstat (limited to 'src/char/char.c')
-rw-r--r--src/char/char.c15
1 files changed, 14 insertions, 1 deletions
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