summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2018-01-07 12:38:08 +0100
committerGitHub <noreply@github.com>2018-01-07 12:38:08 +0100
commit42ee9541fdebf27bde9b0cab614587fe5fcb0c95 (patch)
treed7682707f16d0b8519a24c9a5007ad5ca814a2bf
parent29e68aa40e3effa1946b3889021b8c61a933c05c (diff)
parentc7c764220cf944d05c63374f9e9de8828d0144d9 (diff)
Merge pull request #15297 from poke1024/runner-limit-errs
Limit number of errors and messages sent by runner
-rw-r--r--core/script_debugger_remote.cpp43
-rw-r--r--core/script_debugger_remote.h4
-rw-r--r--main/main.cpp2
3 files changed, 44 insertions, 5 deletions
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp
index bbc2125c5a..e3dc8eb53a 100644
--- a/core/script_debugger_remote.cpp
+++ b/core/script_debugger_remote.cpp
@@ -355,6 +355,13 @@ void ScriptDebuggerRemote::_get_output() {
locking = false;
}
+ if (n_messages_dropped > 0) {
+ Message msg;
+ msg.message = "Too many messages! " + String::num_int64(n_messages_dropped) + " messages were dropped.";
+ messages.push_back(msg);
+ n_messages_dropped = 0;
+ }
+
while (messages.size()) {
locking = true;
packet_peer_stream->put_var("message:" + messages.front()->get().message);
@@ -366,6 +373,20 @@ void ScriptDebuggerRemote::_get_output() {
locking = false;
}
+ if (n_errors_dropped > 0) {
+ OutputError oe;
+ oe.error = "TOO_MANY_ERRORS";
+ oe.error_descr = "Too many errors! " + String::num_int64(n_errors_dropped) + " errors were dropped.";
+ oe.warning = false;
+ uint64_t time = OS::get_singleton()->get_ticks_msec();
+ oe.hr = time / 3600000;
+ oe.min = (time / 60000) % 60;
+ oe.sec = (time / 1000) % 60;
+ oe.msec = time % 1000;
+ errors.push_back(oe);
+ n_errors_dropped = 0;
+ }
+
while (errors.size()) {
locking = true;
packet_peer_stream->put_var("error");
@@ -453,7 +474,11 @@ void ScriptDebuggerRemote::_err_handler(void *ud, const char *p_func, const char
if (!sdr->locking && sdr->tcp_client->is_connected_to_host()) {
- sdr->errors.push_back(oe);
+ if (sdr->errors.size() >= sdr->max_errors_per_frame) {
+ sdr->n_errors_dropped++;
+ } else {
+ sdr->errors.push_back(oe);
+ }
}
sdr->mutex->unlock();
@@ -891,10 +916,14 @@ void ScriptDebuggerRemote::send_message(const String &p_message, const Array &p_
mutex->lock();
if (!locking && tcp_client->is_connected_to_host()) {
- Message msg;
- msg.message = p_message;
- msg.data = p_args;
- messages.push_back(msg);
+ if (messages.size() >= max_messages_per_frame) {
+ n_messages_dropped++;
+ } else {
+ Message msg;
+ msg.message = p_message;
+ msg.data = p_args;
+ messages.push_back(msg);
+ }
}
mutex->unlock();
}
@@ -1011,7 +1040,11 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() :
requested_quit(false),
mutex(Mutex::create()),
max_cps(GLOBAL_GET("network/limits/debugger_stdout/max_chars_per_second")),
+ max_messages_per_frame(GLOBAL_GET("network/limits/debugger_stdout/max_messages_per_frame")),
+ max_errors_per_frame(GLOBAL_GET("network/limits/debugger_stdout/max_errors_per_frame")),
char_count(0),
+ n_messages_dropped(0),
+ n_errors_dropped(0),
last_msec(0),
msec_count(0),
locking(false),
diff --git a/core/script_debugger_remote.h b/core/script_debugger_remote.h
index 00ed22dc29..924d5de2c4 100644
--- a/core/script_debugger_remote.h
+++ b/core/script_debugger_remote.h
@@ -87,7 +87,11 @@ class ScriptDebuggerRemote : public ScriptDebugger {
List<String> output_strings;
List<Message> messages;
+ int max_messages_per_frame;
+ int n_messages_dropped;
List<OutputError> errors;
+ int max_errors_per_frame;
+ int n_errors_dropped;
int max_cps;
int char_count;
diff --git a/main/main.cpp b/main/main.cpp
index b51ea3211c..48537dc3a7 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -665,6 +665,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
GLOBAL_DEF("memory/limits/multithreaded_server/rid_pool_prealloc", 60);
GLOBAL_DEF("network/limits/debugger_stdout/max_chars_per_second", 2048);
+ GLOBAL_DEF("network/limits/debugger_stdout/max_messages_per_frame", 10);
+ GLOBAL_DEF("network/limits/debugger_stdout/max_errors_per_frame", 10);
if (debug_mode == "remote") {