summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2010-01-18 19:36:34 +0000
committerJared Adams <jaxad0127@gmail.com>2010-02-02 16:36:14 -0700
commit809146978c6b85bb00ca2441ef2490441f4a91da (patch)
treedf31de5150485c6d531e323e9ad5ae1fe7c57e9b
parent88b9a3ac5b0e2b99d1105d69d4b0da608d7ae1e4 (diff)
downloadtmwa-809146978c6b85bb00ca2441ef2490441f4a91da.tar.gz
tmwa-809146978c6b85bb00ca2441ef2490441f4a91da.tar.bz2
tmwa-809146978c6b85bb00ca2441ef2490441f4a91da.tar.xz
tmwa-809146978c6b85bb00ca2441ef2490441f4a91da.zip
Attempt to fix forking problem on platinum
-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