Parrot 4.2.0 "Ornithopter" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 10 April 2012.
00:13 whiteknight joined
whiteknight good evening, #parrot 00:13
dalek sella: 7ea6df7 | Whiteknight++ | s (6 files):
[Json] Add a Builder object that traverses the parse and builds output, so we can override the behavior without duplicating the parser
01:05
sella: 0f02ad6 | Whiteknight++ | s (2 files):
[Winxed] Add a header for winxed
01:23
cotto ~~ 01:31
whiteknight hello cotto 01:33
01:40 Kovensky joined
dalek rrotStore: f3bb28e | Whiteknight++ | / (4 files):
[Memcached] Break memcached code up into separate files. Add a setup.winxed with basic build rules for memcached lib.
01:44
rrotStore: 84a6234 | Whiteknight++ | Makefile:
[Makefile] Add a makefile
rrotStore: 046e0e3 | Whiteknight++ | memcached.winxed:
[Memcached] Remove old test file for memcached bindings
rrotStore: e721e8d | Whiteknight++ | mongodb/ (4 files):
[MongoDB] Add in some quick (unbuilt, untested) braindump files for MongoDB bindings
rrotStore: d1a86c9 | Whiteknight++ | mysql/pmc/ (2 files):
[MySql] Quick braindump of bindings for MySql
rrotStore: 25d45b0 | Whiteknight++ | .gitignore:
Add a quick .gitignore file
rrotStore: cb9fbb3 | Whiteknight++ | setup.winxed:
[Memcached] Add the memcached .pbc to the install list
01:52
rrotStore: 2a1da33 | Whiteknight++ | memcached/Memcached.winxed:
[Memcached] Add some TODO notes
01:53
whiteknight I think that's plenty of work for one night 01:54
06:14 bacek joined 06:48 fperrad joined 07:39 jsut joined 08:32 lucian joined 08:42 Tene joined 09:00 Tene joined 09:03 jsut_ joined 09:24 particle1 joined 09:28 rich joined 09:39 particle joined 10:26 wagle joined 10:31 whiteknight joined 10:41 wagle joined
whiteknight good morning, #parrot 10:51
11:01 JimmyZ joined 11:25 bluescreen joined
rich hi there 11:49
11:52 PacoAir joined
whiteknight hello rich 12:05
12:36 mdupont joined
dalek rrotStore: 2c5fa1d | Whiteknight++ | / (8 files):
[MongoDB] Reference the mongodb c driver repo. Several fixes to get the mongodb pmcs to build (untested)
12:39
sella: 0ae739c | Whiteknight++ | s (2 files):
[Json] Add a header file to the install
12:55
13:04 kid51 joined, jsut joined 13:06 JimmyZ joined
dalek kudo/nom: 1fa8fb5 | (Felix Herrmann)++ | src/core/Exception.pm:
Make Exception.Bool return True

Signed-off-by: Moritz Lenz <moritz@faui2k3.org>
13:50
nine whiteknight: shouldn't Parrot_gc_pool_is_owned(interp, self->pmc_allocator, pmc) return true for all PMCs allocated on the current interp? 14:11
whiteknight nine: yes
nine: you can probably add a shortcircuit (if pmc->orig_interp != interp) return;
nine whiteknight: it fails even in ./parrot-nqp --target=pir compilers/data_json/JSON.nqp > runtime/parrot/languages/JSON/JSON.pir 14:12
whiteknight hmmmm
and you aren't creating any threads there, right?
nine I added an assertion to gc_gms_validate_objects right before the PARROT_ASSERT_INTERP
whiteknight: not that I'm aware of
whiteknight somewhere we're losing a PMC 14:13
does the interp keep a reference to the current task, and does that task PMC get marked by GC?
nine just tried to find out if it's a foreign PMC being put into the GC's object list or if an existing object somehow gets overwritten. This result is unexpected
whiteknight Right, I think we have to focus on the small amount of code in the main entry way that is changed, since that's the only code that's used in the data_json code 14:14
nine But something's not right here: (void*)pmc is 0x7fffe6f0afe0. self->pmc_allocator->arena_bounds[36496] is 0x7fffe6f0a2b8 and self->pmc_allocator->arena_bounds[36497] is 0x7fffe6f0b2a8 14:23
Looks to me like the pointer is within one of the areas of the allocator.
whiteknight but it has a different orig_interp? 14:26
nine Oh, but it's not at the right position. ((pmc - pool->arena_bounds[36496]) % 48) should be 0. But (0x7fffe6f0afe0 - 0x7fffe6f0a2b8) % 48 is 8 14:27
orig_interp is fine in this case
as it would be in a non-threaded test 14:28
48 is the pool's object_size
8 would be the size of a pointer on my machine. IIRC a PMC header is actually allocated with a pointer in front, so I guess Parrot_gc_pool_is_owned(interp, self->pmc_allocator, ptr) would be the correct variant 14:30
And indeed the build now succeeds 14:31
whiteknight hmmm
nine And in the threaded test, the PMC really seems to belong to the interp's memory pool, but it's orig_interp is different 14:32
Seems to indicate that the PMC gets overwritten after being added to the GC's object list
whiteknight yes, that's what I've been thinking 14:35
nine is there any way to tell gdb that MarkSweep_GC should be the one from gc_gmc.c, not the one from gc_ms2.c? 14:40
14:46 jsut_ joined
whiteknight nine: It's all done by pointers 14:54
interp->gc_private, or something like that
14:55 JimmyZ_ joined
nine Yes but since that's a generic pointer I have to cast it. But if I cast it to (MarkSweep_GC*) gdb choses the one from gc_ms2.c. I guess that's the first it finds. Anyway, the first member in both structs is the same 14:55
oh 14:56
whiteknight: it gets stranger and stranger. Seems like I was wrong. The PMC with the wrong orig_interp really got allocated on orig_interp according to debug output in get_new_pmc_header. 14:58
whiteknight nine: so it get allocated in the correct interp, or in the wrong interp?
nine whiteknight: it gets allocated on the child thread, but lands in the objects list of the main thread's GC. And it belongs to the main thread's allocator pool. 15:00
dalek Heuristic branch merge: pushed 16 commits to rakudo/nom by jnthn
whiteknight nine: how does it possibly end up in that list? We've added asserts to all routines that add items to the list 15:04
nine And another correction: it belongs to the child thread's pool. I just put the Parrot_gc_pool_is_owned into the wrong function. So allocation seems to be fine. It just somehow appears on the wrong objects list out of nowhere. 15:05
dalek kudo/nom: ac083c5 | jnthn++ | docs/ChangeLog:
Fill out ChangeLog a little more.
15:09
nine whiteknight: I just went again over gc_gms.c checking all places where objects is accessed. The assertions are everywhere 15:12
whiteknight: it only happens if both threads allocate/collect garbage from time to time. They do not have to do it at the same time however. And it does only happen if the main thread is involved. With two child threads allocating/collecting and the main thread just busy waiting it's no problem at all. 15:23
whiteknight: with variations in the test program, the foreign PMC it finds is different so it's not related to any specific object. It's just some random PMC appearing in the wrong list. 15:47
benabik ~~ 15:51
15:59 JimmyZ_ joined 16:01 JimmyZ joined 16:54 JimmyZ_ joined
whiteknight nine: curiouser and curiouser 17:05
17:06 kid51 joined
whiteknight Can somebody explain to me why the loadlib_p_s opcode returns undefined when it fails, and there is absolutely no mechanism whatsoever to find out why it failed? 17:07
benabik whiteknight: Didn't you write it?
Oh.
whiteknight benabik: no, this is the loadlib opcode, not load_bytecode or load_language
benabik Yeah, just noticed that. 17:08
whiteknight cotto: ping
That opcode should either throw an exception with the dlerror() text, or we should provide a second op to provide access to that value 17:09
because it silently failing, and me having to use a debugger to find out why is not acceptable
cotto whiteknight, pong 17:13
whiteknight cotto: I'd like to fix the loadlib opcode
when it fails, it returns undef with no information
I think it should either throw an exception with the message from dlerror(), or we should have a separate op to expose that method
you pick, I code 17:14
cotto those sound like a more appropriate way to fail
have you looked at how much code depends on the current behavior, especially in rakudo? 17:15
Throwing an exception strikes me as the better alternative.
17:27 jashwanth joined 17:28 bluescreen joined 17:34 awwaiid joined
dalek p/cstruct-work: 51a3250 | (Arne SkjƦrholt)++ | src/6model/reprs/CStruct.c:
Start letting CStruct have CArray members.
17:48
p/cstruct-work: 6700db0 | (Arne SkjƦrholt)++ | .gitignore:
Ignore OS X bundles.
kudo/nom: 73ce76a | tadzik++ | lib/Pod/To/Text.pm:
[Pod::To::Text] Print subs and methods prettier

This delibarately skips invocant and optional named params in method signature for the sake of readability and the least amount of confusion.
We're not using simply Sub.perl and Method.perl since they may contain the source code one day, and we almost certainly don't need that.
17:53
whiteknight cotto: I'll send a message to parrot-dev to solicit opinions 18:03
dalek p/cstruct-work: 3bde5a3 | (Arne SkjƦrholt)++ | src/6model/reprs/CStruct.c:
Remove some TODOs since they weren't actually necessary. jnthn++
18:12
cotto whiteknight, good idea 18:25
18:48 kid51 joined
dalek rrotStore: 4b278c3 | Whiteknight++ | / (5 files):
[MongoDB] Remove the submodule
19:05
rrotStore: 3b6ebe4 | Whiteknight++ | / (4 files):
[MySQL] Add the mysql pmc to the build. A few fixes so it actually generates the .so and is loadable
19:27 kid51 joined
dalek kudo/nom: 03edce1 | moritz++ | docs/running.pod:
document --doc
19:30
rrot: 18ac2cd | petdance++ | lib/Parrot/Distribution.pm:
Properly escape the . in qr/.t/
19:41
rrot: b878029 | petdance++ | lib/Parrot/ (7 files):
removed unnecessary /o flags from regexes
19:50 contingencyplan joined
dalek kudo/nom: e60c80c | moritz++ | src/core/IO/ArgFiles.pm:
implement ArgFiles.slurp
20:02
kudo/nom: 9d489dd | moritz++ | src/core/ (2 files):
rename ArgFiles to IO::ArgFiles
kudo/nom: d9753c1 | moritz++ | src/core/IO (2 files):
implement zero-arg slurp
kudo/nom: 2676549 | jnthn++ | / (2 files):
Start to sketch out a PseudoStash that will handle many of the pseudo-packages. Not yet wired up, let alone complete.
20:38
kudo/nom: 1c862bc | jnthn++ | src/Perl6/ (2 files):
Start to clean up indirect lookup handling a little. Also fix a bug in the compile time handling of indirect lookups.
kudo/nom: 68df8f5 | jnthn++ | src/ (3 files):
Switch indirect name lookups to use the new root PseudoStash approach. Still much missing in PseudoStash to make that work yet, mind. Also a little more elimination of duplicate logic.
kudo/nom: 7f28736 | jnthn++ | src/Perl6/Grammar.pm:
Unbust a typed exception.
kudo/nom: 5a31737 | jnthn++ | src/core/PseudoStash.pm:
Get things like ::('MY::$a') and $::('OUTER::b') working.
kudo/nom: c59411c | jnthn++ | src/ (2 files):
Flesh out pseudo-package handling a bit more. Now all of the interpolated lookup tests that now take a similar code path all pass again (and we should handle a bunch more cases now).
20:40 mdupont_ joined 21:00 alvis joined
dalek kudo/nom: b82d905 | jnthn++ | src/Perl6/ (3 files):
Further clean up term:sym<name>, so we don't do any of the reparsing and don't rebuild the LongName object. Since we encounter this rule a fair amount, this seems to improve compilation performance a little.
21:32
whiteknight I wish that this MySQL API was just a little bit nicer 21:57
dalek rrotStore: e0faff7 | Whiteknight++ | mysql/pmc/mysqldbcontext.pmc:
[MySQL] small fix so we can connecto to the mysql database and execute queries with no return values
22:19
rrotStore: de4db04 | Whiteknight++ | mysql/pmc/mysqldbcontext.pmc:
[MySQL] Use mysql_real_query instead of the deprecated mysql_query
rrotStore: 4c6b989 | Whiteknight++ | / (6 files):
[MySQL] Add in MySqlDataTable and MySqlDataRow types. Make sure they build. Untested
kudo/nom: 84f4fd4 | jnthn++ | src/Perl6/ (2 files):
Implement ::<$x> style accesses, and make OUTER::<$x>, CALLER::<$x> and MY::<$x> work.
22:21
kudo/nom: 9b4f785 | jnthn++ | src/core/PseudoStash.pm:
Fix DYNAMIC, so it now basically works.
kudo/nom: c384ab7 | jnthn++ | src/core/PseudoStash.pm:
First crack at OUR.
22:42
23:45 autark joined