| IRC logs at
Set by AlexDaniel on 12 June 2018.
timotimo it'll be the wrapture 00:28
00:38 sena_kun left 00:50 lucasb left 00:54 sena_kun joined 02:37 sena_kun left 02:54 sena_kun joined 02:59 harrow` left 03:12 harrow joined 04:39 sena_kun left 04:54 sena_kun joined 06:18 AlexDaniel left 06:38 sena_kun left 06:53 sena_kun joined 08:30 domidumont joined 08:39 sena_kun left 08:42 domidumont left 08:54 sena_kun joined
nine Wait a minute. If I can use a hypothetical deserialization fixup mechanism to replace Inline::Perl5's INIT phasers, doesn't that mean that I could use such INIT phasers to replace NativeCall's deserialization code? 09:00
In the end, all I need is reinitialization of the native call site before native functions are run. 09:01
lizmat nine: that feels a bit weird to me... I mean, should the HLL even know about deserialization ? 09:09
nine In my case: yes. It needs to bring back some external state. 09:31
Precompiled code using Inline::Perl5 expects a perl interpreter running having loaded all the modules that were loaded during compilation. 09:32
10:09 Voldenet left 10:39 sena_kun left
nine Trying to find a quick fix that has a chance of making it into the upcoming release, I figure that I could actually defer running the resolve_lib_name callback to the first call of the native function. All it needs is a check for handle being non-NULL. 10:42
10:48 Voldenet joined, Voldenet left, Voldenet joined 10:55 sena_kun joined
sena_kun I don't see modules with Fail status, so it seems to safe to cut a moarvm release. 11:18
nine Well, it seems to work just as well as running the callback during deserialization - including the issues we still have 11:37
And no wonder! It's not actually running resolve_lib_name that's causing those issues but my callback deopt fix! 11:46
Huh... can't reproduce it with MVM_SPESH_BLOCKING=1 and MVM_SPESH_NODELAY=1 12:10
Scrap that. It just took a lot of tries 12:13
12:38 sena_kun left 12:51 Altai-man joined, Altai-man is now known as sena_kun 13:13 dogbert11 joined 13:14 dogbert17 left 13:58 lucasb joined 14:07 patrickb joined 14:13 patrickb left 14:15 domidumont joined 14:16 zakharyas joined 14:37 Altai-man_ joined 14:39 sena_kun left 15:11 domidumont left 15:13 domidumont joined 15:14 dogbert11 left 15:15 dogbert11 joined 15:23 dogbert11 left 15:24 dogbert11 joined 15:35 zakharyas left
nine So, not writing back interp_cur_op, interp_bytecode_start and interp_reg_base to the outer runloop fixes, but of course would bring back the deopt issue 16:10
The issue is very sensitive to GC. I can make it fail reliably with a 16K nursery 16:18
16:27 lucasb left 16:37 sena_kun joined 16:39 Altai-man_ left 16:45 dogbert17 joined 16:48 dogbert11 left
nine It's destructors! 17:33
Thing is: remove_one_frame is responsible for running special_return or special_unwind code attached via a frame's extras. That's usually code that will free some malloc'ed memory or like in my case: destructors queued by the GC. 17:36
Before my deopt fix, remove_one_frame would not do so for the top most frame of a runloop. That's OK behaviour for the outermost runloop as the program is going to end anyway and a little sloppyness on cleanup can be forgiven. 17:37
My fix changed this as a side effect, now such handlers are also run for top most frames in nested runloops. That's by itself an improvement as it will fix memory leaks and missed destructor calls for callbacks from native code. 17:38
But this will currently also leave the outer runloop in an inconsistent state, though I don't know why exactly yet.
Actually, I do have an idea: calling destructors means calling MVM_frame_invoke which will set up the runloop's state so it will execute the called frame. However the nested runloop is at its end and we'll change tc->cur_frame back to the outer runloop's. 17:44
Thus we end up with a mix of interp variables. 17:45
17:57 sena_kun left 17:58 sena_kun joined
nine Solution: keep that inner runloop running until those handlers are fully processed. We'll get another chance at returning to the outer runloop when the finalizer returns. 18:03
18:03 sena_kun left 18:04 sena_kun joined
nine Damn...accidentally pushed the change to when resolve_library's called as well. 18:14
Apparently geth's down?
18:46 Geth_ joined, Geth left 18:57 Altai-man_ joined 18:58 sena_kun left 19:18 Altai-man_ left 19:19 sena_kun joined 20:24 domidumont left
Geth_ MoarVM: eb13ccad13 | (Stefan Seifert)++ | src/core/nativecall.c
Fix NativeCall body's resolve_lib_name getting outdated on GC

Need a write barrier on the object when assigning the resolve_lib_name to an attribute in the NC body.
nine With this things seem to be quite stable again :) 20:37
Would love to see a release now!
sena_kun nine, can you clarify if and are "fixing" the same issue, as in, should they be a single entry in the changelog? 20:40
nine sena_kun: yes, they are indeed about the same issue. My first attempt at fixing had unwanted side effects 20:42
sena_kun nine, thanks!
sena_kun notes 20:43
20:58 travis-ci joined
travis-ci MoarVM build errored. Stefan Seifert 'Fix NativeCall body's resolve_lib_name getting outdated on GC 20:58
20:58 travis-ci left 21:20 Altai-man_ joined 21:23 sena_kun left 21:28 zakharyas joined 21:45 zakharyas left 21:46 zakharyas joined 22:20 zakharyas left 23:21 sena_kun joined 23:23 Altai-man_ left