01:15
pyrimidine joined
01:29
lizmat joined
01:30
lizmat_ joined
01:32
zakharyas joined
02:22
pyrimidine joined
02:48
ilbot3 joined
06:25
domidumont joined
06:29
pyrimidine joined
06:35
vendethiel joined
06:56
domidumont joined
07:01
domidumont joined
08:13
vendethiel joined,
domidumont joined
09:04
pyrimidine joined
09:06
brrt joined
|
|||
brrt | ohai #moarvm | 09:06 | |
brrt has got some writing to do | |||
jnthn | o/ brrt | 09:12 | |
09:13
lizmat joined
09:23
camelia joined
|
|||
brrt | \o jnthn | 09:36 | |
i enjoyed your post | |||
jnthn | :) | 09:37 | |
brrt | ... unfortunately i've had very low energy levels in the past few weeks | 10:16 | |
so just getting a blog post out has been really troubling | |||
or, 'challenging' | |||
10:18
samcv joined
|
|||
jnthn knows the feeling | 10:19 | ||
I went some months without blogging for that kinda reason | |||
Then managed 2 in the space of the last week :) | |||
brrt | well, unlike me, you did manage to write some code at least :-) | ||
timotimo | seems like google developed their own fuzzing software | 11:03 | |
oh, it's a service, not a software | 11:04 | ||
11:32
lizmat joined
12:23
pyrimidine joined
|
|||
nine | jnthn: commit 5c659178a07d86fe73b7c506c4ea7b10ad38b0e8 breaks Inline::Perl6 | 13:18 | |
^H:/ | |||
timotimo | i wonder if we want synopsebot to figure out what repo a commit id belongs to and link it directly when someone mentions it? | ||
nine | It hangs during initialize in sched_yield called by MVM_gc_mark_thread_unblocked | ||
in src/gc/orchestrate.c:270 | |||
jnthn | nine: Can I see the whole call stack? | 13:29 | |
(C level one) | |||
nine | need to change trains | 13:31 | |
will post | |||
jnthn | k, thanks | 13:32 | |
Hopefully we'll be able to distill a relatively small test case form it... | 13:33 | ||
*from | |||
nine | Actually I didn't have to change trains. Instead the train changed. | 13:34 | |
jnthn: gist.github.com/niner/6b0f77d66160...462add2f57 | 13:35 | ||
Maybe helpful link: metacpan.org/source/NINE/Inline-Pe...l6.xs#L112 | 13:43 | ||
jnthn | What a kind train. | 13:45 | |
Hmmm | |||
jnthn notices that a call into C land is not on the stack below this | 13:46 | ||
(As in, Moar doesn't own the main loop) | 13:47 | ||
nine | Inline::Perl6 works by initializing Moar with code copied from Moar's main.c, running Perl 6 code that just calls Inline::Perl5's initialization. This will pass a callback routine to a Inline::Perl6's init_inline_perl6_new_callback function which stores the pointer to the callback in a global variable. | ||
jnthn | I suspect we don't have a test like that, and maybe can't have a test like that, inside of t/04-nativecall | ||
nine | That's p5_callback which is used to get back into Perl 6 | ||
jnthn | Yeah, what you're doing is reasonable enough. | ||
I think I understand how it's busted | 13:48 | ||
nine | :) | ||
jnthn | Lemme finish up a refactor on some $dayjob code and I can take a look | ||
nine | Many thanks :) | 13:49 | |
nine will be losing connectivity at around 17:00 on his way to LPW | 13:51 | ||
14:02
pyrimidine joined
|
|||
jnthn | 'tis done, now I can look | 14:04 | |
dalek | arVM/nine-try-this-fix: 859bcf4 | jnthn++ | src/core/nativecall_dyncall.c: Attempted Inline::Perl6 fix. |
14:12 | |
jnthn | nine: I'm trying out a fix along these lines...could you give it a try? | ||
14:16
pyrimidine joined
|
|||
jnthn | Yeah, I've scribbled myself a couple of transition diagrams for GC status and I'm pretty sure that is fine | 14:22 | |
dalek | arVM: be5ed38 | jnthn++ | src/ (4 files): Fix native callback/GC interaction when embedded. A while ago, we started to block a thread for GC purposes when doing a call into native code, so that long-running calls won't prevent progress of other thread in the VM by preventing their GC. In the case of callbacks, we then unblocked the thread. Inline::Perl6 embeds MoarVM. It can therefore create a situation where a MoarVM native callback is invoked when a call into native code was not on the stack. This deals with the issue - at least somewhat - by not trying to unblock a thread that is not blocked, which would lead 5a75216 | jnthn++ | src/gc/orchestrate.h: Add GC block management functions to public API. So that Inline::Perl6 can explore using them, as described in the previous commit. |
14:48 | |
timotimo | to a hang. | 14:49 | |
This hopefully gets things back to working as well as they did prior | |||
to the nativecall GC blocking fixes. However, it's worth noting that | |||
a situation where code running under Inline::Perl6 starts threads, | |||
and then the Perl 5 code using it keeps the main thread tied up for | |||
a while, would result in the Perl 6 threads also getting blocked. | |||
Thus, Inline::Perl6 may want to explore marking the thread running | |||
14:49
pyrimidine joined
|
|||
timotimo | the Perl 5 interpreter that embeds MoarVM as GC-blocked to prevent | 14:49 | |
such a situation. | |||
jnthn | nine: Did a cleanup of the fix I sent you to try and it's in master now. I'm fairly sure this will cover it; see the commit message for a hint on a further (not new) problem that may exist in Inline::Perl6 though :) | 14:52 | |
nine | jnthn: confirmed :) Thanks for the quick fix | 14:59 | |
jnthn | \o/ | 15:00 | |
nine | Sounds like I should just MVM_gc_mark_thread_blocked right after the toplevel_initial_invoke? | 15:03 | |
jnthn | nine: How do you "initially" run code? | 15:04 | |
To give you the callbacks? | |||
I guess you run some setup code of some kind? | 15:05 | ||
You'd need to block it *after* that can run, anyways. | |||
(Which may be the place you're talking about) | |||
The key thing is that, aside from callbacks, you don't get MoarVM to run code in any other way while it's marked as blocked | 15:06 | ||
nine | jnthn: I set up moar with lib/Inline/Perl6/Helper.pm as first Perl 6 argument. The module is just: use Inline::Perl5; Inline::Perl5::init_inline_perl6_callback(@*ARGS[0]); | 15:09 | |
jnthn | nine: Yeah, so it'd be after that has run | 15:10 | |
Since presumably after that point everything else you do that calls back into MoarVM is via the callbacks | 15:11 | ||
nine | I can now confirm that this also works without your workaround. Now I just wonder, if there's any way to check if MVM_gc_mark_thread_blocked is available? | 15:16 | |
jnthn | Yeah, though I think my workaround probably wants to stay for other embedders in the future. :) | 15:17 | |
Hmm...you could check MoarVM version at configure time and set a define? | |||
timotimo | i wonder how the ndarrayview could be implemented so it can also handle CArray ... | 15:22 | |
nine | jnthn: excellent idea :) | 15:33 | |
jnthn: do I understand this correctly? Thanks to the MVM_gc_mark_thread_blocked call, we allow for another MoarVM thread to steal our GC work, while we're happily running Perl 5 code? | 15:34 | ||
timotimo | that's how i understand it | ||
15:37
pyrimidine joined
|
|||
jnthn | nine: Yes | 15:38 | |
nine: So you could use Inline::Perl6 to do start { ...blah some Perl 6 thing... } | 15:39 | ||
And get the Promise back | |||
And later in Perl 5 code .result it to get the result | |||
But it could compute happily in the background without the Perl 5 thread working away at stuff blocking the Perl 6 threads when they need GC | |||
That may just be useful for something ;) | |||
nine | It's very cool in any case ;) | 15:40 | |
jnthn | Aye :) | ||
nine | Inline::Perl6 v0.08 is on its way to CPAN :) | 15:44 | |
[Coke] | nine++ jnthn++ | 15:46 | |
16:11
pyrimidine joined
|
|||
timotimo | i wonder if i'm missing something crucial in my jit implementation of the throwpayload ops | 16:50 | |
maybe the throwpayload* ops want to be marked :throwish in the oplist | 16:53 | ||
well, that brings the build further | |||
dalek | arVM: 3c82b48 | timotimo++ | src/core/op (2 files): mark throwpayload* as :throwish in oplist |
17:10 | |
arVM: fea28ed | timotimo++ | src/jit/graph.c: implement throwpayload* in the JIT |
|||
17:13
domidumont joined
17:25
pyrimidine joined
17:39
pyrimidine joined
18:11
pyrimidine joined
18:26
FROGGS joined
20:42
pyrimidine joined
22:43
pyrimidine joined
22:57
pyrimidine joined
22:59
pyrimidine joined
|