Time Nick Message 00:30 paramat will merge later game#648 00:30 ShadowBot https://github.com/minetest/minetest_game/issues/648 -- Default: Add snow, snowblock, ice to puts_out_fire group by paramat 01:41 paramat i'll merge game 648 very soon, i think i can go ahead since it was requested by PilzAdam 01:45 paramat however in the fire mod i will need to split off the extinguishing of flames into a separate lightweight fast-acting abm, as currently it is implemented in a slow-acting abm together with heavy code 01:46 est31 its the same problem as leafdecay I think 01:57 paramat the new abm can work like lavacooling, using 'neighbors = {"group:puts_out_fire"}' so that most of the work is done in the engine, not in lua, this way extinguishing fire can act fairly quickly 02:01 paramat now merging game 648 02:04 paramat complete 02:11 paramat now i feel like finally adding all those missing spaces to nodes.lua .. 02:34 T4im hmm "Double fault error from mod 'default' in callback item_OnPlace(): error in error handling" bug or expected? despite lack of information, I think it boils down to `minetest.place_node({x=0, y=0, z=0}, { name = "default:cactus", param1=0, param2=0 })` 02:35 est31 T4im, what precisely are you doing 02:35 T4im playing around with mtt :) 02:36 T4im placing every node into the world, trying out all sorts of things with them automaticly 02:36 T4im I think minetest.place_node doesn't like placing nodes with on_place = minetest.rotate_node 02:36 T4im but a bit guessing 02:37 T4im not sure if that's to be expected or worth a testcase 02:37 paramat cacatus has 'on_place = minetest.rotate_node', perhaps that's interacting with you'placing' it with a rotation? 02:37 T4im well, that was the guess, yes.. tree trunk the same 02:38 paramat ah ninja'd 02:38 T4im :D 02:38 est31 you do get these double fault errors when lua calls c which calls lua and which raises an error 02:39 T4im ah, good to know 02:40 T4im so somewhere along the line something perhaps expects a player object with direction for the rotation, but doesn't have one 02:40 est31 right now, just as a coincidence, I've gotten enough annoyed by it, to investigate it further 02:41 T4im "Place node with the same effects that a player would cause" I've heared that somewhere before :D 02:42 T4im I think dig_node did claim the same, and then called can_dig without player.. which lead to a few issues, until it was officially declared optional 02:45 OldCoder est31, http://minetest.org/150824.txt - but other devs say not related. The user and I are prepared to help debug the original problem regardless. 02:45 OldCoder If there are requests or suggestions for next steps, we are attentive. 02:46 hmmmm T4im, just to verify, the full error message says something along the lines of "runtime error in : error in error handling, correct? 02:46 hmmmm and you do get a backtrace? 02:47 T4im no backtrace, no segfault 02:47 hmmmm really 02:47 T4im just "ERROR[main]: ServerError: Double fault error from mod 'default' in callback item_OnPlace(): error in error handling" 02:47 hmmmm and how did you trigger this? 02:47 hmmmm just this? minetest.place_node({x=0, y=0, z=0}, { name = "default:cactus", param1=0, param2=0 })` 02:47 est31 T4im, do you use luajit 02:48 T4im good question.. lemme check quickly.. I've been switching latly a few times 02:48 est31 because embedded lua prints no stack trace, luajit prints that fake trace 02:50 T4im hmm should have been used 02:50 T4im any way to check for sure? 02:51 hmmmm aside from the pause menu..? 02:51 est31 if luajit then print("hi") 02:52 est31 but might be disabled if security is enabled 02:52 hmmmm ah sorry T4im it seems like that's not the kind of double fault error we're looking for 02:52 est31 ? 02:52 hmmmm it's the runtime error/error in error handling one 02:52 hmmmm with a backtrace 02:52 est31 what are we actually looking for 02:53 hmmmm a way to reproduce a true error in error handling without setting debug = nil 02:56 est31 well he got error in error handling, no? 02:57 hmmmm they're caused by separate things 02:57 est31 ? 02:57 hmmmm that error in error handling produces a backtrace and is comparatively easy to track down 02:57 hmmmm it happens when a lua api produces another callback which errors while already inside of a callback 02:58 hmmmm the inner callback produces an error in error handling because lua thinks it's already handling an error 02:58 hmmmm so it gets captured and thrown to the parent callback as a LuaError 02:59 hmmmm the parent callback catches the LuaError as a runtime error and captures a backtrace pointing to where the erroring callback was registered 02:59 hmmmm err, where the erroring callback was triggered 02:59 est31 builtin/game/item.lua:276 02:59 hmmmm we cannot "fix" this, it's a lua thing 02:59 est31 very helpful 03:00 hmmmm what I'm concerned about is the case where people get "error in error handling" with absolutely no other information 03:00 hmmmm this, I'm not able to reproduce except for setting debug = nil which is quite contrieved 03:01 est31 why is getting no backtrace worse than getting a complete shit backtrace? 03:01 hmmmm because you're left with no clue whereas at least you have some indication of what kinds of things could be the problem with the shit backtrace 03:01 hmmmm at least with my diagnostics you can tell which callback it happens in, and to what mod 03:02 est31 you know it was due to somebody placing an item, but thats all, no? 03:02 hmmmm right but that's better than nothing 03:02 est31 but its still a bug 03:02 hmmmm and the former is well understood 03:02 hmmmm while the latter we have no idea why it happens and if it's somehow minetest's fault 03:02 hmmmm the former is a lua bug - not ours 03:02 hmmmm we cannot fix it 03:02 hmmmm therefore i'm not interested 03:02 est31 we can workaroung 03:02 hmmmm how 03:02 est31 workaround* 03:03 est31 pcall from lua itself 03:03 est31 works like a charm 03:03 T4im my luajit between compile-jail and runtime environment got a bit out of sync, running with actual luajit now, with stack trace… now I just need to get a way to copy it out x) 03:04 T4im actually that's not really a helpful stacktrace either, nvm 03:04 hmmmm est31: how can it be implemented though 03:04 T4im just points me to where I called the place_node 03:04 hmmmm yes but with that information, you know: 03:04 hmmmm 1). which node being placed is causing the failure 03:04 hmmmm 2). the callback actually failing (on_place) 03:05 est31 you dont know 1 03:05 est31 you just know its some node 03:05 est31 from a mod 03:05 hmmmm what's preventing him from adding a print statement? 03:05 T4im well core.place_node({ x=0, y=3, z=0 }, { name = "default:cactus", param1=0, param2=0 }) causes it 03:05 est31 we dont need any error reporting then: what's preventing him from adding a print statement? 03:05 hmmmm .. 03:05 est31 because everybody can just debug with print statements 03:06 est31 just put print("1") print("2") etc between all lines 03:06 hmmmm look, est, if you are able to fix it, then please do 03:06 hmmmm i'm merely pointing out that of the two variations of the problem, this is much less interesting 03:08 est31 run it with normal lua, you get no stacktrace as well 03:09 est31 also, if its a lua bug, are lua authors aware of it 03:09 hmmmm that's because normal lua does not have a script execution wrapper extension like luajit does 03:10 est31 do we have a minimum example we can show to upstream? 03:10 hmmmm tons. 03:10 hmmmm well not really 03:11 hmmmm you'd have to write your own, but within minetest it's extremely simple to recreate 03:11 est31 the error in error handling also appears with embedded lua 03:11 est31 I dont know about that wrapper, but I do know you get error in error handling also with normal lua 03:12 T4im is there any way to hook into the error event? as in, being able to do some cleanup or print out some last information? a sort of "on_error" routine? (of course with no guarantees of working properly, but rather opportunistic) 03:12 est31 T4im, look at script_error_handler in c_internal.cpp 03:17 est31 hmmmm, Im just wondering, if that error is so well understood, why isnt it neither reported to upstream nor fixed 03:18 hmmmm dunno, ask in #lua or something 03:23 paramat game#649 :P~ 03:23 ShadowBot https://github.com/minetest/minetest_game/issues/649 -- Default/nodes.lua: Add missing spaces, shorten lines by paramat 03:38 hmmmm sorry est, i really just can't do minetest stuff tonight 03:38 hmmmm my brain is fried 03:39 hmmmm why don't you search in the lua source for luaD_throw(L, LUA_ERRERR) and set printfs around them so you can see which is triggered on that kind of error 03:41 est31 I'll hack a pure lua solution tonight, and we can use that as fallback if we dont find a better way to fix the bug 03:46 kahrl can someone explain how m_errorhandler in ScriptApiBase works? 03:46 kahrl it's a lua stack index saved for eternity upon game startup 03:46 est31 yes 03:46 est31 lua_pcall takes it as argument 03:46 kahrl isn't the lua stack essentially cleared whenever you call from lua into C? 03:46 kahrl so this index won't make sense then 03:46 hmmmm that's what I thought but it seems to work for some reason 03:47 kahrl weird 03:47 est31 it doesnt work when you call from lua to c 03:47 hmmmm nested calls probably /don't/ work because the error handler function index is messed up 03:47 hmmmm oh I know why 03:47 hmmmm that's exactly why 03:48 hmmmm it uses the same lua stack for the lifetime of m_script 03:49 hmmmm whenever it does a callback, some more things are pushed onto the stack, some things are popped off, etc. but it's always the same stack 03:49 hmmmm when in lua it gets a new stack 03:50 hmmmm so I assume the reason for the error in error handling is a bad index due to the fact that it relies on an absolute position in a known stack state whereas the callback after a lua api is called gets a new stack 03:50 est31 but the stack is still the same 03:50 est31 its still m_luastack 03:50 hmmmm you mean m_luastate 03:51 est31 L is set in SCRIPTAPI_PRECHECKHEADER to be getStack 03:51 est31 err the result of getStack() 03:51 hmmmm hrm 03:51 kahrl that variable is badly named 03:51 hmmmm i guess you're right, i don't know 03:51 kahrl and getStack too 03:51 kahrl they should call it "state" not "stack" 03:52 hmmmm less talking, more investigating ^^ 03:52 kahrl the type is a lua_State 03:52 kahrl which can hold different stacks at different times 03:52 est31 what?! 03:53 est31 you pass that thing to functions, their docs call it "the stack" and it can actually hold multiple stacks? 03:54 kahrl how else would the stack, after a call from lua to C, hold exactly the function's arguments and nothing else? 03:55 kahrl and after the C function returns it reverts to the old stack 03:55 kahrl I imagine it must be a "stack of stacks" 03:55 kahrl where a new stack is created whenever a C function is called 03:56 est31 perhaps C callbacks just get another lua state object? 03:56 kahrl yeah, I guess that's also a possibility 03:56 * paramat waves hand "these are not the error in error handlings you are looking for" 03:57 hmmmm definitely not 03:57 hmmmm wtf 03:57 hmmmm it is a 'stack of stacks' 03:57 hmmmm each 'stack' is contained in a CallInfo structure 03:57 hmmmm this is also how lua tracks the amount of recursion 03:58 hmmmm in any case I'm still not sure why you think my theory is wrong 03:58 hmmmm instead of guessing, just read the source code 03:58 hmmmm luaD_precall 03:59 kahrl if you were saying that to me, I think the theory is right 03:59 est31 okay, I've hacked a POC for lua based error reporting: https://gist.github.com/est31/e84180467a76f8badb42 03:59 hmmmm @ est 04:08 est31 ok, now I've added an assert(lua_type(L, m_errorhandler) == LUA_TFUNCTION);, and guess whether it succeeded 04:08 est31 so kahrl hmmmm your theory seems to be right 04:49 est31 summary for today's discussion: https://github.com/minetest/minetest/issues/1423#issuecomment-134472243 05:17 paramat okay i will merge game#649 in a moment, before conflicts arise 05:17 ShadowBot https://github.com/minetest/minetest_game/issues/649 -- Default/nodes.lua: Add missing spaces, shorten lines by paramat 05:45 paramat now merging game 649 05:54 paramat merge complete 05:54 kahrl NICE https://gist.github.com/kahrl/2f97189739af34a7bf8f 05:55 kahrl previously, of course, the above was an "error in error handling" error 05:55 kahrl but #3112 fixes that 05:55 ShadowBot https://github.com/minetest/minetest/issues/3112 -- Push error handler afresh each time lua_pcall is used by kahrl 05:59 kahrl est31, hmmmm: ^ 06:00 hmmmm looks great to me 06:01 hmmmm kahrl, just curious, was the error simply "error in error handling" or did it have a runtime error message as well? 06:01 kahrl one thing I wonder is if lua_pushcfunction would be faster than the lua_rawgeti on LUA_REGISTRYINDEX 06:01 kahrl let me check 06:02 kahrl 2015-08-25 08:02:08: ERROR[Main]: ServerError: Lua: Double fault error from mod 'default' in callback item_OnPlace(): error in error handling 06:02 kahrl that's all 06:02 hmmmm !?!?! 06:02 hmmmm oh shit 06:02 hmmmm no way is that THE error 06:02 hmmmm let me check! 06:03 hmmmm or wait, were you running vanilla lua? 06:03 kahrl yes 06:03 hmmmm ahhh that explains it 06:03 hmmmm so the mystery remains unsolved 06:06 kahrl right, with luajit I get the partial backtrace 06:08 kahrl and with luajit + #3112 I get the full backtrace like in the above gist 06:08 ShadowBot https://github.com/minetest/minetest/issues/3112 -- Push error handler afresh each time lua_pcall is used by kahrl 06:12 Sketch2 I can't find this in the wiki, but is there a limit to how many metadata fields you have per node? 06:13 hmmmm 65535 06:16 Sketch2 oh, for real? wow, k. 06:16 hmmmm that's not an excuse to design your mod sloppily though 06:17 Sketch2 I'll never need that many. I just wanted to make sure it wasn't something tiny like 2, 'cuz I know there's only a couple of the regular params available. 16:23 rubenwardy hmmmm, I don't think that Lua scripts should not implicitly override each other 16:23 rubenwardy it is a good feature to have, although it should be done explicitly through some mod.conf 16:23 rubenwardy would be good for server-side as well 16:24 rubenwardy of course, the feature requires the the overrider knows / supports which version of the other mod will be installed. 16:24 rubenwardy hmmmm, check log (if you haven't already) 16:24 rubenwardy * scripts should implicityly override each other 16:24 rubenwardy I'm tired :P 16:43 T4im I take it, the only way to deliberately create an unknown node from lua is by voxelmanip; is there any more-or-less reliable way to get an unused content_id, or is there even a reserved one for that purpose? 16:44 Sketch2 put in a do, place a node, remove that mod. 16:44 Sketch2 *do = node 16:44 T4im Sketch2: at runtime 16:45 T4im automaticly :D 16:46 Sketch2 er mod was what I was trying to type. mind is on the history of graphics. um, so why would you want to do this? 16:46 T4im automatic testing 16:47 Sketch2 I don't know how you could place a node that's undefined. That kinda goes against how computers run 16:47 Sketch2 you have to define something before you can use it 16:47 T4im I already know that I can, I just asked about some specifics on how to do it right/best 16:48 Sketch2 the only reason they might exist in-game, is because the definition has been taken out. 16:48 T4im or has never been put in... 16:51 Sketch2 I know that there was a camo mod that if you placed a player-turret, then dug out the block beneath it... 16:51 Sketch2 it would fall and lose it's metadata 16:52 Sketch2 so it would then shoot you, because it no longer knew who placed it 16:53 Sketch2 I remember modding that mod to fix that glitch. 16:54 Sketch2 I know that's not exactly what you're talking about, but in a similar way, I think your voxelmanip trick is your best bet 16:54 Sketch2 that the stripping has to come after the placing 16:55 Sketch2 maybe if you made a mod to do that somehow 17:00 T4im Sketch2: do you know anything about how content ids for mapnodes are being assigned? 17:07 Sketch2 it's in mapblock.cpp, nameidmapping.cpp, and content_mapnode.cpp 17:08 Sketch2 oh, and nodedef.cpp - what exactly do you need to know? 17:09 T4im exactly what I asked in the first sentence 17:18 Sketch2 so I'm reading it as "How do you purposely get an undefined error node" 17:19 Sketch2 If you want a blank block, I still think you need to place one that's been defined, because that's how computer programs work 17:19 Sketch2 you need to define it before you can use it 17:20 Sketch2 then strip its data, and it should get you what you want 17:20 VanessaE what I do in such a situation is place many such blocks, back up the world, then remove the mod 17:21 VanessaE that way I can just cp the backed-up world back to the worlds dir and start minetest 17:21 VanessaE I use that procedure for testing conversion ABMs and aliases, in particular 17:22 T4im VanessaE: I can't depend on manual removal, and I can set unknown nodes just fine, I just need a good way to get an unused content_id... either by reserveration or by e.g. looping backwards through the available-id space to find the first unused one, or maybe a better idea that someone comes up with 17:22 VanessaE now THAT I am not sure about 17:23 VanessaE can't just randomly pick a high value say in the 20k-30k range? 17:24 Megaf Sketch2: why do you want to create an unkown block? 17:24 H-H-H Sketch2 doesnt 17:24 Megaf Sketch2: you could just create a node with the unkown texture and name it as unkown block 17:24 H-H-H T4im does 17:24 Sketch2 I don't. T4im does for who-knows-what reason 17:25 T4im VanessaE: well, if there's no better way I probably do something along those lines yea.. best I've come up with yet is looping backward from the max-id and check if a name is associated with it 17:25 Megaf ^ T4im 17:25 T4im Megaf: nope, read up ;) 17:25 Sketch2 lols, that's great 17:25 Megaf !server Megaf 17:25 ShadowBot Megaf: server [--{name,address,ip,players,ping,port} ] 17:25 Megaf ops 17:26 T4im VanessaE: but for that to work "good" I'd like to know for example that assignment is done icrementally from the lowest id available.. or whatever procedure is used 17:26 VanessaE T4im: well reason I suggest such a high value is not even Dreambuilder goes that high (it's somewhere in the mid-16k range, if I understand content_id correctly) 17:27 T4im well, would be good to know if it just increments, or if there's some other logic behind it 17:27 T4im :D 17:27 T4im hmmmm probably could answer that in a few words 17:27 T4im :D 17:27 H-H-H look in the code lol 17:28 H-H-H that would tell ya 17:28 VanessaE ^ 17:28 T4im well, guess so... 17:28 T4im :) 17:29 VanessaE note that there's a hiccup around 2048, from when the limit was increased. caused a glitch in older maps. 17:29 VanessaE (specifically, one node, whatever it might have been in the map, became undefined such that it didn't even have a node name anymore) 17:30 T4im well would be interesting if that ended up as a universal unknown then ;) 17:31 VanessaE heh 17:31 T4im Megaf: the short answer is, I do automatic testing; like placing all nodes of a registered item space against unknown nodes in order to check if they would crash (like when they forget checking for definition), so fake texture won't do :P 17:31 T4im pointed_thing crazynesses 17:37 T4im "CONTENT_NC" -- "yay, a no-content reserveration... oh wait.. that's a nyancat" -_- 17:39 VanessaE haha 17:51 T4im oh wait, there's actually really a reservation at 125 \o/ 17:58 VanessaE bbl 17:58 T4im bye, and thanks :) 18:53 nanepiwo is there any way to make a node interacteable by those without interact? 19:00 nanepiwo ill assume no without editing the CPP code 19:25 est31 nanepiwo, no, this isnt possible 19:25 nanepiwo ok 19:25 est31 it is possible to give them interact, and restrict every action, except for that node 19:25 nanepiwo how? 19:26 est31 but in order to genuinely have interact only for some nodes you'd need to edit prediction and other things 19:26 est31 and this is clientside behaviour 19:26 est31 with client scripting this will perhaps become possible 19:26 nanepiwo or I can lock them in a cell with unbreakable nodes :P 19:26 est31 nanepiwo, what's the actual usecase? 19:27 nanepiwo a rules mod similar to https://forum.minetest.net/viewtopic.php?f=9&t=11200 19:27 nanepiwo I don't like the idea of some formspec appearing on join 19:28 nanepiwo I'll try standing on a pad which opens rules. 19:46 celeron55 the thing you can do is give interact to everyone, but actually require something like interact_extra for most things (by using the is_protected api functionality and maybe something else) 19:47 celeron55 (or maybe call it "member" or whatever suits the particular purpose) 19:50 nanepiwo that could work 21:35 OldCoder Didn't the error in error handling bug get fixed? I thought it was patched recently 21:35 OldCoder ERROR[main]: Lua: Double fault error from mod 'riventest' in callback node_on_punch(): error in error handling 21:35 OldCoder In thread 7f08d2ddf740: server.cpp:511: void Server::step(float): A fatal error occurred: Lua: Double fault error from mod 'riventest' iERROR[main]: Lua: Double fault error from mod 'riventest' in callback node_on_punch(): error in error handling 21:35 OldCoder In thread 7f08d2ddf740: server.cpp:511: void Server::step(float): A fatal error occurred: Lua: Double fault error from mod 'riventest' in callback node_on_punch(): error in error handlingn callback node_on_punch(): error in error handling 21:35 OldCoder Sorry, it looks like that pasted twice 21:35 OldCoder 21:37 kahrl OldCoder: the info about what mod and callback it happened in was added 21:37 OldCoder So it still says error in error handling? 21:37 kahrl yes 21:38 OldCoder O.K. thanks; looking into this further 21:38 kahrl I have a PR that should fix some/most/(all?) of those 21:38 OldCoder May I have it as a patch? 21:38 kahrl #3112 21:38 ShadowBot https://github.com/minetest/minetest/issues/3112 -- Push error handler afresh each time lua_pcall is used by kahrl 21:38 OldCoder I will test for you 21:38 OldCoder Reviewing 21:38 kahrl that would be great :) 21:38 * OldCoder will add this right this minute if there is a diff 21:39 OldCoder kahrl, I'm on #3112. Is there a way to get this as a diff or patch? 21:39 ShadowBot https://github.com/minetest/minetest/issues/3112 -- Push error handler afresh each time lua_pcall is used by kahrl 21:39 kahrl wget https://github.com/minetest/minetest/issues/3112.patch 21:39 kahrl then git am 3112.patch 21:40 kahrl oops, make that: wget https://github.com/minetest/minetest/pull/3112.patch 21:40 OldCoder 21:40 OldCoder wget; this includes both commits? 21:40 kahrl yeah 21:41 OldCoder Proceeding and will report back 21:50 OldCoder kahrl, the patch applied successfully and seems to have worked 21:50 * OldCoder is now able to see where a problem has lurked 21:50 kahrl awesome :) 21:50 OldCoder Cite the time saved as a justification for the PR 21:50 * OldCoder goes to fix the actual bug that has been uncovered 23:33 VanessaE where is the "source" code for minetest_game's schematics? 23:34 VanessaE (I mean the table data used to create the .mts files in default/schematics) 23:35 VanessaE looks like it's this code? https://github.com/paramat/saveschems/blob/master/init.lua