02:25 FROGGS_ joined 04:01 synopsebot6 joined 06:51 synopsebot6 joined 06:55 FROGGS[webchat] joined
FROGGS[webchat] all lights are green for debian! \o/ buildd.debian.org/status/package.php?p=moarvm \o/ buildd.debian.org/status/package.php?p=rakudo \o/ 06:56
moritz \o/ 06:59
07:17 synopsebot6 joined 07:18 domidumont joined 07:23 domidumont joined 07:51 domidumont joined 08:33 zakharyas joined 08:34 FROGGS[webchat] left
jnthn moarning! :) 10:16
nwc10 good *, jnthn 10:17
jnthn Great work on the Debian builds. Nice to see the list of places we run :) 10:18
nwc10 it's not easy being green. (well done) 10:19
domidumont thanks ! :-) 10:29
dalek arVM: 5c65917 | jnthn++ | src/core/nativecall_dyncall.c:
Mark a thread GC-blocked while its in native code.

This means that setting off some long-running C code on one thread will not cause other threads to be unable to perform GC.
11:27
nwc10 jnthn: is there TFM I should read on what "GH blocked" means?
I'm assuming that when a thread is GC blocked, the others don't wait for it when doing GC 11:28
but who checks what objects owned by it are pointing to?
jnthn When a thread is "GC blocked", if GC happens, another thread will steal its collection work. 11:29
And if the thread unblocks while that is happening, it will wait until the GC is over before continuing onwards. 11:30
nwc10 basically it's sort of an anti-Local-Interpreter-Lock
ie "this MoarVM's state isn't going to be touched"
by default, every thread "locks" its state and only it gets to read it 11:31
jnthn Yes, when you enter blocked state you are promising that you're not going to do stuff like allocate
nwc10 but when going AWOL, a thread releases that lock
jnthn *allocation
nwc10 (and re-acquires it when it returns from elsehwere)
s/read/write/ # earlier
jnthn Right. We already use this technique for things like I/O
And sleep 11:32
nwc10 :-) in that
jnthn So that one thread sleeping or blocking on I/O won't prevent others from being able to collect and get on with stuff
nwc10 with green threads there is only one OS thread, and you release your lock for the duration of doing something "slow"
11:32 domidumont joined
nwc10 here effectively every MoarVM thread then has a green threading-alike on it 11:33
which is held either by the thread itself (when running MoarVM code)
or release, so that someone else can do its housework
released, so that someoen else can hold it as needed, when housework is needed
jnthn Yup 11:34
nwc10 Good.
jnthn That's a good way of seeing it
jnthn just did a build with libffi so he can apply the same change there
nwc10 I'd never thought of this before. The design seems elegant and simple
jnthn Might also be interseting to know that the "am I blocked" flag is also unified with the GC interupt 11:35
github.com/MoarVM/MoarVM/blob/mast...ntext.h#L1 has some documentation around this 11:36
nwc10 thanks - will read after lunch
dalek arVM: f769569 | jnthn++ | src/core/nativecall_libffi.c:
Add nativecall GC block/unblock for libffi too.
11:46
diakopter timotimo: here's a new fuzzing tool for you: blog.trailofbits.com/2016/11/02/sh...ast-again/ 12:05
12:21 stmuk joined
timotimo jnthn: does that properly unblock a thread when entering a callback? and re-block when returning from a callback into the C code "in between" interpreters? 12:48
i'm not sure how it interacts with the sub-interpreter stuff
ah, i see the handling of callbacks exists 12:51
it's mentioned explicitly in the bump commit
jnthn Yes :) 13:23
14:24 pyrimidine joined
dalek arVM: 2699370 | jnthn++ | src/ (3 files):
Remove dead code.

Firstly, we never modified num_user_threads, so it was always zero. Secondly, the one thing that tried to use it would just hang in a place it should not if we actually did it that way.
14:40
arVM: 4b9e3a8 | jnthn++ | src/6model/reprs/ReentrantMutex.c:
Fix spello; diakopter++.
diakopter num_user_threads did something someday ago 14:41
hard to recall what
jnthn Yeah 14:42
Fixing global destruction up proper is better done without it anyways 14:43
16:38 synopsebot6 joined 16:39 ggoebel joined
timotimo jnthn: do you have an idea where about ten thousand strings that are all stringified numbers may come from in the string heap? :) 16:40
jnthn cuids 16:44
They used to be much longer :)
timotimo oh, duh 16:47
i wonder if it'd be very hard to turn them into ints now that they are actually just ints anyway?
jnthn Well, it's an interface change 16:48
And bytecode format chance
*change
Well, not if we atoi them I guess :)
timotimo they take about 8 byte each :)
jnthn Uh, more than that surely
timotimo at least the 4-digit ones 16:49
jnthn And MVMString is bigger than 8 bytes before the storage?
*An
timotimo just in the string heap, i mean
i wonder why each string in the string heap is accompanied by four bytes of size info rather than a varint 16:50
jnthn OH, right
nwc10 $because ? 16:51
timotimo if it's just $because and not @because, maybe a work-around can be found ;) 16:52
nwc10 be careful that you don't break the look-ahead code in the object lazy deserialisation if you change stuff
jnthn Since this is not in the serialization blob, the risk of that should be quite low
nwc10 ah OK
superstituous bugs might have figured out quantum tunneling :-) 16:53
timotimo BBIAB, and then maybe i'll turn the string lengths into varints 16:57
17:32 FROGGS joined
FROGGS o/ 17:35
nwc10 \p 17:36
er, ooops
\o
that's better
FROGGS it is :o)
timotimo dinner time \o/ 20:12
FROGGS nebuchadnezzar: this bug is closable now, right? bugs.debian.org/cgi-bin/bugreport....bug=841344 20:41
nwc10 jnthn: paste.scsys.co.uk/538942 -- t/04-nativecall/20-concurrent.t can fail - known? 20:42
ASAN does not have an opinion about this
FROGGS ewww 20:44
I bet this does not happen on windows... 20:45
FROGGS 's experience with concurrency is that it is usually rock solid on windows, less so on linux, and even more less so on bsd 20:46
timotimo MVMuint32 bytes = read_uint32(cur_pos) >> 1; 21:10
cur_pos += 4 + bytes + (bytes & 3 ? 4 - (bytes & 3) : 0);
^- is this something like "string lengths are always multiples of 2" or something?
or something for the fast table somehow? 21:12
jnthn timotimo: I think we pad so that the read of the uint32 is aligned 21:23
nwc10: I couldn't make it fail at all locally 21:24
timotimo ah so with a varint that's no longer an issue
jnthn FROGGS: I actually devloped that test and the stuff it fixes on Windows :)
oops
*on Linux
timotimo i didn't yet see the code that *writes* the string heap :\
jnthn nwc10: Thanks for the example of how it fails though. Travis didn't offer up so much info. 21:25
I'll have to hammer on the test a bit more tomorrow 21:26
timotimo oh! we have a bit of the size be "decode utf8 or not" 21:40
seriously, where is that code hiding o_O 21:51
jnthn To assemble the string heap? 21:55
src/mast/compiler.c or so
timotimo ah, i see it now 21:56
you saved me from madness
jnthn :) 22:08
timotimo i have to fake up MVMSerializationWriters left, right, and center to make all this work >_> 23:25
having the fake SerializationReader on the stack won't work when reading fails, because then it'll try to MVM_free that address when something goes wrong 23:43