github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
00:26
colomon left
00:55
sena_kun left
02:28
ZzZombo joined
02:47
ZzZombo_ joined
02:50
ZzZombo left,
ZzZombo_ is now known as ZzZombo
03:02
MasterDuke left
03:56
ZzZombo_ joined
04:00
ZzZombo left,
ZzZombo_ is now known as ZzZombo
05:04
ZzZombo_ joined
05:07
ZzZombo left,
ZzZombo_ is now known as ZzZombo
06:43
domidumont joined
07:24
domidumont left
07:25
domidumont joined
07:52
domidumont left
08:56
zakharyas joined
09:44
zakharyas left
09:46
zakharyas joined
10:04
zakharyas left
10:05
zakharyas joined
10:37
sena_kun joined
10:40
sena_kun left,
sena_kun joined
10:45
zakharyas left
10:49
sena_kun left
10:53
zakharyas joined
11:09
Guest38485 joined
|
|||
Kaeipi | can someone review github.com/MoarVM/MoarVM/pull/1222 ? | 11:13 | |
nine? | |||
11:30
zakharyas left
|
|||
Guest38485 | nine: I believe your nativecall fix from yesterday solved the GC related problems I had | 12:06 | |
is jnthn lurking around by any chance? | 12:33 | ||
is there an easy way, for experimental reasons, to disable the MultiCache? | 12:39 | ||
lizmat | you mean, to do something like this? modules.raku.org/dist/InterceptAll...:ELIZABETH | 13:11 | |
afk& | |||
Guest38485 | let me investigate | 13:12 | |
jnthn | You could probably just turn the add to multi cache function into a no-op by making it return immediately | 13:14 | |
I don't think there's any #define to disable it | |||
13:22
zakharyas joined
|
|||
Guest38485 | jnthn: I assume you mean MVM_multi_cache_add ? | 13:24 | |
jnthn | Yeah | 13:25 | |
13:31
lucasb joined
|
|||
Guest38485 | jnthn: thx for the help | 14:10 | |
excellent | 14:13 | ||
14:38
sena_kun joined
|
|||
Guest38485 | turning off the MultiCache seems to solve the problem nine is hunting | 14:43 | |
nine | Guest38485: wait, what? | 14:44 | |
Guest38485 | i.e. this: Native call expected return type with CPointer representation, but got a P6opaque (Scalar) | ||
nine | How did you get on this track? | ||
Guest38485 | good question | 14:45 | |
I know there's a bug in there somewhere | 14:46 | ||
try this | |||
@@ -162,6 +162,7 @@ MVMObject * MVM_multi_cache_add(MVMThreadContext *tc, MVMObject *cache_obj, MVMO | |||
cache_obj = MVM_repr_alloc_init(tc, tc->instance->boot_types.BOOTMultiCache); | |||
}); | |||
} | |||
+ return cache_obj; | |||
cache = &((MVMMultiCache *)cache_obj)->body; | |||
in src/6model/reprs/MVMMultiCache.c | 14:47 | ||
nine | Guest38485: good timing! My gc_torture run with the 2 fixes just completed successfully | 14:52 | |
Guest38485 | cool, one fix was the 'pop' in NativeCall.c but what was the other one? | ||
nine | MVMROOTing sc | ||
Guest38485 | ah | ||
about MVMROOTing sc, there are three functions in serialization.c doing similar stuff | 14:54 | ||
MVM_serialization_demand_object, MVM_serialization_demand_stable and MVM_serialization_demand_code | 14:55 | ||
does sc need protecting in all three? | |||
nine | Probably not. MVM_serialization_demand_object only needs it because NativeCall's deserialize disables the gen2_default flag for running the callback. Thereby GC can happen where it previously could not | 14:56 | |
Guest38485 | phew | 14:58 | |
nine | Guest38485: I still see rare segfaults even with all our fixes together. This one even more mysterious: (gdb) bt | 15:21 | |
#0 0x000000030000fe01 in ?? () | |||
#1 0x0000000000000000 in ?? () | |||
even though I compiled moar with debug info | |||
Guest38485 | that looks bizarre, what are you running? | ||
jnthn | Maybe JIT, maybe in a nativecall generated thunk thing? | 15:22 | |
Guest38485 | I have been running csv-ip5xs.pl | ||
nine | csv-ip5xs.pl | ||
Guest38485 | :) | ||
nine | Who'd have thought that running callbacks during deserialization could cause so many issues? | 15:23 | |
jnthn | Callbacks? During...deserialization? | ||
Callbacks to...what? | 15:24 | ||
nine | jnthn: figured that would catch your attention :) github.com/MoarVM/MoarVM/commit/c7...762f75d34e | 15:25 | |
jnthn | omg | 15:27 | |
nine | yes, indeed | ||
jnthn | Yeah, that pretty much violates the entire "we'll never GC during this" assumption the deserialization code was written with :) | ||
nine | I did try everything else I could come up with before doing that, but everything failed :/ | ||
I'd still be happy to rip this out again and implement another solution | |||
jnthn | Did you consider something a bit like the mechanism used for conflict resolutions? | 15:28 | |
nine | I don't think I'm aware of that | ||
jnthn | The deserialization process returns the things that are in conflict, so HLL code can sort them out | ||
That's how stash merging gets sorted out | |||
Let me remember what it's called... | 15:29 | ||
But you could maybe do similar for things needing additional fixup work after deserialization | |||
Which avoids the nested runloop problem | |||
If you grep for repo_conflict_resolver in NQP/Rakudo you probably end up finding something useful | 15:30 | ||
(repo in this case short for repossession) | |||
nine | Guest38485: I just got this even with the multi cache disabled as you pasted: Cannot iterate object with P6opaque representation (Scalar) in sub no-args at /home/nine/.perl6/precomp/0C84318D4D23C3D09B2963B1A856093E6F04953B/DB/DB8C95655A124A12F21C201495BF931C3B18E184 line 1 | 15:32 | |
Guest38485 | I got it as well | 15:34 | |
nine | jnthn: so for a more sane implementation of my current solution, I'd have to have make NativeCall objects always cause conflicts, so they get on the list and then extend CompUnit::RepositoryRegistry.resolve_repossession_conflicts to run code that will determine the library's location and run nativecallbuild | 15:37 | |
jnthn | nine: Umm...I was more thinking that there's a way to flag a type as "needs fixup" or some such | 15:39 | |
Well, I guess you can still put those on the same list and use null to signal it's a fixup case | 15:40 | ||
But probably some types need to be told they're always in need of fixup, so whenever we deserialize one, put it onto the list | |||
Or some list :) | |||
nine | This could open up interesting possibilities. Right now Inline::Perl5 supports precompilation by exporting an INIT phaser to its user. This phaser then restores the Perl 5 interpreter, loads Perl 5 modules and hooks up the wrappers again. All work that could be seen as part of deserialization. | 15:43 | |
I guess I should just let the bizarre issues be and move on to implement a proper solution right away. 4th time is the charm? :D | 15:49 | ||
jnthn | :D | 15:50 | |
15:52
Guest38485 left
16:19
Kaeipi left,
Kaeipi joined
16:38
sena_kun left,
zakharyas1 joined
16:40
zakharyas left
16:53
sena_kun joined
16:58
domidumont joined
17:23
zakharyas1 left
18:16
zakharyas joined
18:34
AlexDaniel left
18:38
sena_kun left
18:52
sena_kun joined
19:08
zakharyas left
|
|||
nine | Lazy deserialization makes everything a bit more complicated... | 20:11 | |
lizmat | perhaps it would help if not everything were lazy ? | 20:12 | |
nine | Nah...remember, we usually want everything! | 20:15 | |
Cake, eating, coffee, clean kitchen, ... | 20:16 | ||
lizmat | .oO( let the torture continue! ) |
20:21 | |
sena_kun | can we wrap a moarvm release tomorrow? | 20:30 | |
20:39
sena_kun left
20:53
sena_kun joined
21:32
zakharyas joined
21:39
domidumont left
22:07
Kaeipi left
22:08
Kaiepi joined
22:09
zakharyas left
22:34
AlexDaniel joined,
AlexDaniel left,
AlexDaniel joined
22:39
sena_kun left
22:53
sena_kun joined
|