summaryrefslogtreecommitdiff
path: root/src/inspircd.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-03-07 10:25:40 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-03-07 10:25:40 +0000
commit148835bea39a0a28625bdab7c7c1a709876b76aa (patch)
tree3ee02b24b685ef02d3cc8c21b0a82886639cd8ff /src/inspircd.cpp
parent16a56843b0bc40a813c1bcb275141249ca6eed0b (diff)
Added a 'max depth' to stop recursive issue
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3507 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/inspircd.cpp')
-rw-r--r--src/inspircd.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 253c2246b..eae26c64e 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -72,6 +72,7 @@ std::vector<userrec*> local_users;
extern int MODCOUNT;
extern char LOG_FILE[MAXBUF];
int openSockfd[MAXSOCKS];
+int yield_depth;
sockaddr_in client,server;
socklen_t length;
@@ -602,6 +603,11 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
sockaddr_in sock_us; // our port number
socklen_t uslen; // length of our port number
+ if (yield_depth > 3)
+ return;
+
+ yield_depth++;
+
/* time() seems to be a pretty expensive syscall, so avoid calling it too much.
* Once per loop iteration is pleanty.
*/
@@ -634,6 +640,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
}
TickMissedTimers(TIME);
expire_run = true;
+ yield_depth--;
return;
}
else if ((TIME % 5) == 1)
@@ -665,7 +672,10 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
* servers... so its nice and easy, just one call.
*/
if (!(numberactive = SE->Wait(activefds)))
+ {
+ yield_depth--;
return;
+ }
/**
* Now process each of the fd's. For users, we have a fast
@@ -778,6 +788,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
break;
}
}
+ yield_depth--;
}
int InspIRCd::Run()
@@ -804,6 +815,7 @@ int InspIRCd::Run()
/* main loop, this never returns */
expire_run = false;
+ yield_depth = 0;
while (true)
{