summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Server/Plugins/Debuggers/Debuggers.lua28
-rw-r--r--Server/Plugins/Debuggers/Info.lua6
2 files changed, 34 insertions, 0 deletions
diff --git a/Server/Plugins/Debuggers/Debuggers.lua b/Server/Plugins/Debuggers/Debuggers.lua
index 28b7e254d..c433148ca 100644
--- a/Server/Plugins/Debuggers/Debuggers.lua
+++ b/Server/Plugins/Debuggers/Debuggers.lua
@@ -2420,6 +2420,34 @@ end
+function HandleConsoleDeadlock(a_Split)
+ -- If given a parameter, assume it's a world name and simulate a deadlock in the world's tick thread
+ if (a_Split[2]) then
+ local world = cRoot:Get():GetWorld(a_Split[2])
+ if (world) then
+ world:ScheduleTask(0,
+ function()
+ -- Make a live-lock:
+ while (true) do
+ end
+ end
+ )
+ return true, "Deadlock in world tick thread for world " .. a_Split[2] .. " has been scheduled."
+ end
+ LOG("Not a world name: " .. a_Split[2] .. "; simulating a deadlock in the command execution thread instead.")
+ else
+ LOG("Simulating a deadlock in the command execution thread.")
+ end
+
+ -- Make a live-lock in the command execution thread:
+ while(true) do
+ end
+end
+
+
+
+
+
function HandleConsoleDownload(a_Split)
-- Check params:
local url = a_Split[2]
diff --git a/Server/Plugins/Debuggers/Info.lua b/Server/Plugins/Debuggers/Info.lua
index a29ab5995..028f7a70b 100644
--- a/Server/Plugins/Debuggers/Info.lua
+++ b/Server/Plugins/Debuggers/Info.lua
@@ -266,6 +266,12 @@ g_PluginInfo =
HelpString = "Performs cBoundingBox API tests",
},
+ ["deadlock"] =
+ {
+ Handler = HandleConsoleDeadlock,
+ HelpString = "Simulates a deadlock, either on the command execution thread, or on a world tick thread",
+ },
+
["download"] =
{
Handler = HandleConsoleDownload,