{"action":"created","issue":{"url":"https://api.github.com/repos/cuberite/cuberite/issues/4289","repository_url":"https://api.github.com/repos/cuberite/cuberite","labels_url":"https://api.github.com/repos/cuberite/cuberite/issues/4289/labels{/name}","comments_url":"https://api.github.com/repos/cuberite/cuberite/issues/4289/comments","events_url":"https://api.github.com/repos/cuberite/cuberite/issues/4289/events","html_url":"https://github.com/cuberite/cuberite/issues/4289","id":352241914,"node_id":"MDU6SXNzdWUzNTIyNDE5MTQ=","number":4289,"title":"/thaw 100000 crashes the server","user":{"login":"wsw70","id":1345886,"node_id":"MDQ6VXNlcjEzNDU4ODY=","avatar_url":"https://avatars2.githubusercontent.com/u/1345886?v=4","gravatar_id":"","url":"https://api.github.com/users/wsw70","html_url":"https://github.com/wsw70","followers_url":"https://api.github.com/users/wsw70/followers","following_url":"https://api.github.com/users/wsw70/following{/other_user}","gists_url":"https://api.github.com/users/wsw70/gists{/gist_id}","starred_url":"https://api.github.com/users/wsw70/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wsw70/subscriptions","organizations_url":"https://api.github.com/users/wsw70/orgs","repos_url":"https://api.github.com/users/wsw70/repos","events_url":"https://api.github.com/users/wsw70/events{/privacy}","received_events_url":"https://api.github.com/users/wsw70/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2018-08-20T18:14:43Z","updated_at":"2018-08-21T18:16:52Z","closed_at":null,"author_association":"NONE","body":"Client version:   1.12\r\nServer OS:        Ubuntu 18.4\r\nCommit id:        89017dfbbcb0750c07fe067f2b61cde94e4dc875\r\n\r\n\r\n### Expected behavior\r\n\r\nSome kind of safety net when issuing a command which crashes the server. \r\n\r\n### Actual behavior\r\n\r\nServer crashed. The log is\r\n\r\n```\r\n     [19:38:52] Player PX_Viva is executing command \"/thaw 100000\" in world \"world\" at world age 502343.\r\nErr  [19:39:12] Deadlock detected: world world has been stuck at age 502343. Aborting the server.\r\n     [19:39:12] CS at 0x7f19796f9790, World world clients: RecursionCount = 1, ThreadIDHash = c53908d2e67e5952\r\n     [19:39:12] CS at 0x7f1978fa8160, World world players: RecursionCount = 0, ThreadIDHash = c53908d2e67e5952\r\n     [19:39:12] CS at 0x7f19796f9740, World world tasks: RecursionCount = 0, ThreadIDHash = c53908d2e67e5952\r\n     [19:39:12] CS at 0x20af2d0, World world chunkmap: RecursionCount = 0, ThreadIDHash = c53908d2e67e5952\r\n     [19:39:12] CS at 0x7f19787a2790, World world_nether clients: RecursionCount = 0, ThreadIDHash = 8a0a14db126294f5\r\n     [19:39:12] CS at 0x7f1978051160, World world_nether players: RecursionCount = 0, ThreadIDHash = 8a0a14db126294f5\r\n     [19:39:12] CS at 0x7f19787a2740, World world_nether tasks: RecursionCount = 0, ThreadIDHash = 8a0a14db126294f5\r\n     [19:39:12] CS at 0x3499490, World world_nether chunkmap: RecursionCount = 0, ThreadIDHash = 8a0a14db126294f5\r\n     [19:39:12] CS at 0x7f19737fa790, World world_the_end clients: RecursionCount = 0, ThreadIDHash = 59ba7f776a9d828a\r\n     [19:39:12] CS at 0x7f19730a9160, World world_the_end players: RecursionCount = 0, ThreadIDHash = 59ba7f776a9d828a\r\n     [19:39:12] CS at 0x7f19737fa740, World world_the_end tasks: RecursionCount = 0, ThreadIDHash = 59ba7f776a9d828a\r\n     [19:39:12] CS at 0x34c5f30, World world_the_end chunkmap: RecursionCount = 0, ThreadIDHash = 59ba7f776a9d828a\r\n     [19:39:12] CS at 0x20c31a0, cLuaState plugin ChatLog: RecursionCount = 0, ThreadIDHash = 39018edce4119b82\r\n     [19:39:12] CS at 0x347af20, cLuaState plugin TestLuaRocks: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x34803d0, cLuaState plugin NetworkTest: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x3484880, cLuaState plugin DumpInfo: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x348cf00, cLuaState plugin ProtectionAreas: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x34c7090, cLuaState plugin WorldEdit: RecursionCount = 1, ThreadIDHash = c53908d2e67e5952\r\n     [19:39:12] CS at 0x34c7740, cLuaState plugin APIDump: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x4590e00, cLuaState plugin HookNotify: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x4590f30, cLuaState plugin Debuggers: RecursionCount = 0, ThreadIDHash = f457bd22cac02869\r\n     [19:39:12] CS at 0x4591060, cLuaState plugin Core: RecursionCount = 0, ThreadIDHash = c53908d2e67e5952\r\nErr  [19:39:12]   D:    | Cuberite has encountered an error and needs to close\r\nErr  [19:39:12] Details | SIGABRT: Server self-terminated due to an internal fault\r\nErr  [19:39:12] Cuberite Jenkins clang x64 Release (master) build id: #1004\r\nErr  [19:39:12] from commit id: 89017dfbbcb0750c07fe067f2b61cde94e4dc875 built at: Fri 17 Aug 15:46:50 UTC 2018\r\n```\r\n\r\n### Steps to reproduce the behavior\r\n\r\nIssuing `/thaw 100000` by an 11 years old player (though the age may not matter)\r\n"},"comment":{"url":"https://api.github.com/repos/cuberite/cuberite/issues/comments/414771839","html_url":"https://github.com/cuberite/cuberite/issues/4289#issuecomment-414771839","issue_url":"https://api.github.com/repos/cuberite/cuberite/issues/4289","id":414771839,"node_id":"MDEyOklzc3VlQ29tbWVudDQxNDc3MTgzOQ==","user":{"login":"Cl1608Ho","id":21020917,"node_id":"MDQ6VXNlcjIxMDIwOTE3","avatar_url":"https://avatars3.githubusercontent.com/u/21020917?v=4","gravatar_id":"","url":"https://api.github.com/users/Cl1608Ho","html_url":"https://github.com/Cl1608Ho","followers_url":"https://api.github.com/users/Cl1608Ho/followers","following_url":"https://api.github.com/users/Cl1608Ho/following{/other_user}","gists_url":"https://api.github.com/users/Cl1608Ho/gists{/gist_id}","starred_url":"https://api.github.com/users/Cl1608Ho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Cl1608Ho/subscriptions","organizations_url":"https://api.github.com/users/Cl1608Ho/orgs","repos_url":"https://api.github.com/users/Cl1608Ho/repos","events_url":"https://api.github.com/users/Cl1608Ho/events{/privacy}","received_events_url":"https://api.github.com/users/Cl1608Ho/received_events","type":"User","site_admin":false},"created_at":"2018-08-21T18:16:52Z","updated_at":"2018-08-21T18:16:52Z","author_association":"MEMBER","body":"as a matter of philosophy, i strongly do not recommend limiting plugin's capabilities.\r\n\r\nfirst thing: plugins are arbitrary code that runs in the server's context. if this code takes a long time for some computation, that's gonna take resources and might block the server. this is not the fault of the server and should not be attempted to be stopped (plus, if a plugin is blocking nonstop, the server can't even abort it without going into undefined state, which is basically why the deadlock detector provokes a crash)\r\nsecond category, plugins running few instructions that result in heavy computation on cuberite's side. this can definitely be optimized, but i think appears only in those \"set area of blocks\" thing. we should split into chunks and process asynchronously.\r\nthird category, plugins running a lot of instructions that each result in small computation on cuberite's side but add up to a lot of work for the server. we should not care about those as the individual operation runs fine and even a bunch of those wont affect performance (otherwise i consider them heavy). it's at the plugin's discretion to handle these gracefully and split them over several ticks, etc....."}}
{"actor":{"display_login":"Cl1608Ho"}}