Camelia, the Perl 6 bug

IRC log for #parrot, 2009-06-20

Parrot | source cross referenced

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:12 AndyA joined #parrot
00:30 bacek_ joined #parrot
00:43 ronsvg joined #parrot
00:43 ronsvg First I tried:
00:44 ronsvg ron@zoe:~$ git clone git://github.com/rakudo/rakudo.git
00:44 ronsvg Initialized empty Git repository in /home/ron/rakudo/.git/
00:44 ronsvg remote: Counting objects: 16457, done.
00:44 ronsvg remote: Compressing objects: 100% (4671/4671), done.
00:44 ronsvg remote: Total 16457 (delta 11974), reused 15717 (delta 11445)
00:44 ronsvg Then this died:
00:44 ronsvg ron@zoe:~/rakudo$ perl Configure.pl --gen-parrot
00:44 ronsvg Generating Parrot ...
00:44 ronsvg /usr/bin/perl build/gen_parrot.pl
00:44 ronsvg Checking out Parrot r39599 via svn...
00:44 ronsvg svn: OPTIONS of 'https://svn.parrot.org/parrot/trunk': could not connect to server (https://svn.parrot.org)
00:44 ronsvg the location of parrot_config to be used to build Rakudo Perl.
00:44 ronsvg Building Parrot ...
00:44 ronsvg Unable to locate parrot_config
00:44 ronsvg To automatically checkout (svn) and build a copy of parrot r39599,
00:44 ronsvg try re-running Configure.pl with the '--gen-parrot' option.
00:44 ronsvg Or, use the '--parrot-config' option to explicitly specify
00:44 ronsvg the location of parrot_config to be used to build Rakudo Perl.
00:45 ronsvg Instructions taken from: http://rakudo.org/how-to-get-rakudo
00:49 ronsvg left #parrot
00:53 Coke looks like when gen-parrot ran, there was a connection problem to the parrot svn server.
00:53 Coke I just did an svn up; should be ok now.
00:58 MoC joined #parrot
01:07 dukeleto joined #parrot
02:25 rakudohudson joined #parrot
02:42 Zak joined #parrot
03:06 zak_ joined #parrot
03:17 magnachef joined #parrot
03:20 donaldh joined #parrot
03:20 cotto skids++ #"we have to keep in mind that volunteer coder skill sets vary widely... not all developers are capable of grasping a project the size of Parrot and must restrict their attention to subsystems -- either that, or do no coding and just a lot of talking about coding."
03:51 dduncan joined #parrot
05:02 Zak joined #parrot
05:04 dduncan left #parrot
05:40 Theory joined #parrot
05:53 sparkymat joined #parrot
06:01 amuck joined #parrot
06:04 zak_ joined #parrot
06:28 dukeleto joined #parrot
06:30 petdance joined #parrot
06:32 iblechbot joined #parrot
06:32 dalek parrot: r39673 | petdance++ | trunk (2 files):
06:32 dalek parrot: turns out that key_string can return NULL.
06:32 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39673/
07:20 donaldh joined #parrot
08:23 dukeleto joined #parrot
08:45 amuck_ joined #parrot
10:23 mikehh all tests PASS at r39673 - pre/post config, smoke, fulltest - Ubuntu 7.04 i386
10:25 dalek lua: aaff848 | fperrad++ | src/lib/luastring.pir:
10:25 dalek lua: fix a duplicate identifier .param/.local
10:25 dalek lua: review: http://github.com/fperrad/lua/commit/aa​ff8482de197c12e83b5d3676dbe3b4ca7660b5
10:30 iblechbot joined #parrot
11:20 donaldh joined #parrot
11:27 darbelo joined #parrot
11:32 masak joined #parrot
12:01 sparkymat joined #parrot
12:07 sparkymat How is Cardinal coming along?
12:09 darbelo I think it's being developed at http://github.com/cardinal/cardinal/tree/master now.
12:12 darbelo Don't know how active it is, you should probably ask fperrad if he's arround.
12:16 viklund_ joined #parrot
12:27 cotto I thought cardinal was Tene's project.
12:28 sparkymat I thought so too.. I was hoping that Tene was around..
12:29 MoC joined #parrot
12:30 cotto you can always msg him
12:30 sparkymat here?
12:30 purl here is probably all i know of you.  but then, here is all you know of me.  :)  it's like... like... time for a beer, i think.
12:30 cotto yeah.  just say 'msg Tene Have a nice day' or something and purl will relay the message once he says something
12:33 * cotto wanders off to pvmw
12:50 rblackwe Good luck to all looking for the Parrot VM Workshop.
12:58 cotto joined #parrot
12:59 jdv79_ yeah, looks like = vs := - thanks
13:00 Infinoid jdv79_: Great.  So the next question is, why did parrot use =?  (It switches them to = if configure detected a non-gnu make, I think.)
13:01 * Infinoid reenables polyglotbot's crontab
13:02 Infinoid rakudo: say %*VM<config><VERSION>
13:03 polyglotbot OUTPUT[1.3.0␤]
13:03 Infinoid rakudo: say %*VM<config><revision>
13:03 polyglotbot OUTPUT[Parrot VM: Can't stat languages/perl6/perl6.pbc, code 2.␤main: Packfile loading failed␤]
13:03 Infinoid ah, it's rebuilding rakudo now
13:03 s1n_yapc joined #parrot
13:05 Infinoid rakudo: say %*VM<config><revision>
13:05 polyglotbot OUTPUT[39673␤]
13:09 kid51 joined #parrot
13:10 Austin_Hastings joined #parrot
13:10 Infinoid Tene: I guess the next step for polyglotbot is to have bounce-trees for each HLL so they can be updated atomically as well
13:11 Infinoid but the config/makefile system needs some help for running HLLs on non-installed parrots before that becomes useful
13:12 kid51 Parrot VM Workshop now underway
13:12 kid51 The president speaks!
13:13 Austin_Hastings Aww, man. First, no food. Now the "dog ate my homework."
13:16 magnachef joined #parrot
13:19 Austin_Hastings left #parrot
13:24 rblackwe Organizing for PVMW lunch http://etherpad.com/0iwPLcPjMG
13:24 rblackwe feel free to join in.
13:32 magnachef joined #parrot
13:33 McC joined #parrot
13:45 hachi joined #parrot
13:49 mikecanz joined #parrot
14:10 dalek parrot: r39674 | cotto++ | trunk/examples/tutorial (15 files):
14:10 dalek parrot: [examples] use $P0 = new foo? notation in examples
14:10 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39674/
14:11 cotto That's the preferred notation, for any of you at pvmw.
14:16 s1n_yapc cotto: what's wrong with the previous notation?
14:17 jhorwitz joined #parrot
14:18 * jhorwitz virtually looks in at PVMW
14:18 cotto pmichaud will cover it later.  Both work fine for now.
14:19 Whiteknight joined #parrot
14:21 Whiteknight finally at YAPC!
14:23 cotto Yay!  Good luck finding the pvmw.
14:23 Whiteknight I know, it took me over 45 minutes!
14:24 skids joined #parrot
14:24 Whiteknight this campus is a goddamn nightmare
14:25 rblackwe Whiteknight: thank Mr. Gates and his new building.
14:25 rblackwe Finding PVWM is the Parrot fitness plan
14:26 mj41_ joined #parrot
14:51 mikecanz joined #parrot
14:56 ttbot joined #parrot
14:56 mj41 joined #parrot
15:14 Whiteknight Infinoid: ping
15:16 Whiteknight purl msg Infinoid: there are a get tests in t/op/io.t that assume FileHandle=Pipe. these are causing failures in the io_cleanups branch. Can you let me know whether you think this behavior is still valid?
15:16 purl Message for infinoid stored.
15:20 donaldh joined #parrot
15:47 nopaste "mikehh" at 92.30.51.48 pasted "Some test timings for coretest and on other runcores" (37 lines) at http://nopaste.snit.ch/16979
15:49 dalek TT #778 created by whiteknight++: Make FileHandle Subclassable
15:50 Whiteknight mikehh: how do those numbers compare to what they were last month?
15:50 Whiteknight or do you not have comparisons?
15:50 mikehh looking at this the rugular core seems to be fastest on the tests (if you subtract the other tests it runs)
15:51 mikehh Whiteknight - I think they are quite a bit faster - let me look at some of my logs
15:53 Whiteknight I'm very surprised that -f outperformed -S
15:53 Whiteknight I'm also surprised that -C and -j ran as fast as they did
15:53 Whiteknight for the test suite with lots of little programs, -C and -j have a lot of extra overhead that should slow them down
16:07 * Whiteknight is always happy to see things going faster
16:10 Theory joined #parrot
16:15 Psyche^ joined #parrot
16:16 Infinoid Whiteknight: since I haven't introduced a PipeHandle type yet, I can't really complain about FileHandle pipes yet
16:26 Whiteknight Infinoid: We have the io_cleanups branch to play in now, if you want to start working on that there
16:27 Whiteknight I'm happy to help, but I think you have the vision for it
16:29 burmas joined #parrot
16:33 Whiteknight I keep looking at the pipe code, just waiting to chop that up into little bits
16:37 Whiteknight er, not pipe. "sockets". It's the sockets code I want to chop up
16:37 Infinoid heh, yeah
16:37 Infinoid socket subclasses will be fun
16:37 Infinoid actually, pipes work fine as far as I can tell (which isn't far)
16:37 Infinoid it's threaded tests I'm having a problem with
16:38 Whiteknight threaded tests? which ones?
16:38 Infinoid testing Pipe requires a couple of threads
16:38 Whiteknight hey, are you at YAPC?
16:38 Whiteknight or, going to YAPC?
16:38 purl See : going to yapc::na or yapc::whatever or cwest, uri, DrForr or dha
16:38 Infinoid nope, I'm at home in bed
16:38 Infinoid the sound of rain makes me tired. :)
16:39 Whiteknight yeah, it was raining really hard during my drive out here
16:39 Whiteknight I spend about three hours in the car wishing I was back in bed
16:39 Whiteknight and then another two hours in the car wishing I was in a McDonalds getting some food
16:39 Infinoid in 100 years, they'll have little mini-mcdonalds built right into your glove box
16:40 MoC joined #parrot
16:41 Whiteknight and those mini-mcdonalds will run on Parrot 101.3.0
16:41 Infinoid and gas stations will have little Fast Food Pellets to refuel it
16:42 Whiteknight that would be sweet
16:42 Infinoid that would be horrible for our lifespan as a species :)
16:45 Infinoid you'd have people who could no longer squeeze out of their cars (or hoverjets or whatever)
16:46 Infinoid anyway, here's my problem with pipes
16:47 nopaste "infinoid" at 65.18.171.17 pasted "The Patch" (388 lines) at http://nopaste.snit.ch/16980
16:47 cotto <<
16:47 nopaste "infinoid" at 65.18.171.17 pasted "The Test" (71 lines) at http://nopaste.snit.ch/16981
16:47 nopaste "infinoid" at 65.18.171.17 pasted "The Fail" (26 lines) at http://nopaste.snit.ch/16982
16:51 dalek partcl: r509 | coke++ | branches/tclstring:
16:51 dalek partcl: Attempt to subclass our string-like PMC with a pir class.
16:51 dalek partcl: review: http://code.google.com/p/p​artcl/source/detail?r=509
16:51 dalek partcl: r510 | coke++ | branches/tclstring/ (7 files):
16:51 dalek partcl: - rename tclstring pmc to tclstringpmc
16:51 dalek partcl: - add a PIR subclass that only handles the HLL mapping for now.
16:51 dalek partcl: - simplify the pir_compiler test to reliably pre-load the tcl library for the
16:51 dalek partcl: test.
16:51 dalek partcl: review: http://code.google.com/p/p​artcl/source/detail?r=510
16:56 cognominal joined #parrot
16:56 Whiteknight THE FAIL!
16:56 purl the fail is strong in you
16:58 Whiteknight wow, that's a shitty failure
16:58 Infinoid I'm not really sure where to start...
16:59 Whiteknight what class name is it looking for there?
17:01 Whiteknight and are you sure that Pipe and PipeHandle are being compiled into the .so?
17:01 Infinoid 'Test;Builder'
17:01 Whiteknight did you make realclean after you added those?
17:01 Infinoid (gdb) print interp->vtables[enum_class_Pipe]->init
17:01 Infinoid $4 = (init_method_t) 0x7fbe2aeeed60 <Parrot_Pipe_init>
17:01 Infinoid yes.
17:01 Whiteknight okay then
17:02 Whiteknight that shut me up
17:02 Infinoid I think it's failing to clone a pir class ... somehow
17:02 Whiteknight so yeah, run in gdb, put a break point on Parrot_Confess, and figure out what that class_name string is
17:02 Infinoid I haven't used parrot threads for much
17:02 Infinoid class_name is 'Test;Builder'
17:03 Whiteknight so...? what?
17:03 purl so is, like, $foo->does('rolename') the only way to tell if a given object conforms to a role (or has a role composed into it... still working on the terminology)
17:03 Whiteknight just adding those two pmcs causes this failure?
17:03 Whiteknight that's retarded
17:04 Infinoid well, I'm probably misusing the threads api somehow in my test
17:04 s1n_yapc joined #parrot
17:04 Infinoid I spawn a thread and get this crash
17:04 Whiteknight I do know that interpreter cloning is a little broken, so that might include not cloning the class hash
17:05 Infinoid just having the pmcs built in is fine; I can comment out this test (as the version in The Patch does) and the simple object creation tests work fine
17:05 Infinoid ok.  is there a better way to spawn a thread to manage the other end of the pipe for my test? :)
17:06 Infinoid (some variant of fork() which also works on win32 would work equally well for me)
17:07 Whiteknight yeah, creating the new thread in the test must not properly clone the class hash
17:08 Infinoid thing is, I nabbed the thread-spawning syntax directly from the "thread type 1" test in t/pmc/threads.t
17:08 Infinoid but that test is written in perl, so I guess it didn't load Test;Builder.
17:12 Whiteknight I assume Test;Builder is being included from Test_more.pir?
17:13 Infinoid load_bytecode 'Test/Builder.pbc'
17:13 * Whiteknight doesn't know a lot about testing, including parrot's test environment
17:13 Infinoid Test/More and Test/Builder both seem to be loaded as pbc
17:14 Whiteknight in that test you nopasted, I don't see Test/Builder anywhere
17:14 Infinoid right.  but runtime/parrot/library/Test/More.pir loads it
17:14 Whiteknight ah, that's what I was trying to figure out. Okay
17:15 Whiteknight what namespace is it loaded into?
17:15 Whiteknight and is the thread running in that namespace?
17:15 Infinoid .namespace [ 'Test'; 'Builder' ]
17:15 Infinoid and I doubt it.
17:16 Whiteknight i really don't know a lot about how threading works either
17:16 Infinoid and I don't know a lot about how namespaces work :)
17:16 Whiteknight I usually don't learn a lot about  system until I decide it's time to completely rewrite it :)
17:16 Infinoid heh, same here
17:17 Infinoid maybe I can spawn the thread *before* loading the test libs
17:17 Whiteknight yeah, any number of crackpot ideas could work
17:18 Infinoid no clean way to report failure, tho
17:18 Whiteknight urg?
17:18 purl rumour has it urg is basically a schwarztian + a pass to normalize the keys to managable values as I read it
17:18 Infinoid well, I need to create the pipe before I spawn the thread, so each thread can handle one half of the pipe
17:18 McC joined #parrot
17:18 Infinoid but earlier in the same test, I check whether creating pipes work... so I'd have to do that first pipe blind
17:19 Infinoid so it's not a very good workaround.
17:19 Whiteknight maybe keep it the way you have it, but load test_more.pir again in the thread
17:19 Infinoid I think it might crash before executing that part, but I'll try it
17:20 Whiteknight do or do not. There is no try
17:21 Infinoid crash or crash not, there is no do
17:21 Infinoid it crashed in the same spot...
17:21 Whiteknight damnit
17:21 Whiteknight maybe threads are just TEH SUCK right now
17:22 Infinoid I don't think it's getting through the run_clone() method
17:22 Infinoid they seem to be a work in progress
17:22 Whiteknight what does that method do anyway?
17:22 Infinoid it's supposed to run a pir function (specified by name) in a separate thread
17:22 Whiteknight I'll probably end up doing some thread cleanup work when I get started on AIO
17:22 Whiteknight which should be soon
17:23 Infinoid that makes sense.  if you don't clean them up, they will very likely block you, just like they're blocking me
17:23 Infinoid I want to use the same kind of threads for socket tests, too
17:24 Infinoid that said, it looks like a fairly deep rabbit hole, which is why I haven't looked too far into it
17:25 Tene Infinoid: sounds like the problem I reported earlier
17:26 Tene interp cloning fails an assert when any classes of some type exist
17:26 Infinoid Tene: If there's already a ticket number, I can go complain in its comments :)
17:26 Whiteknight If nobody owns it, assign it to me
17:26 Tene Infinoid: name is something like cannot create thread when hll loaded
17:27 Infinoid ok.  I guess I can simplify that further.  No hll here, just a pir test class
17:27 Infinoid ah, #757: Problem with threads and HLLs
17:28 Tene it looked like it failed on any class from a nested namespace or something
17:28 Whiteknight Tene: pmichaud just blamed you for a problem in his presentation
17:28 Tene Whiteknight: explain more?
17:28 cotto wish you were here
17:28 purl hmmm... wish you were here is a good easy one
17:28 Whiteknight the .HLL directive broke his PCT demonstration
17:29 Whiteknight he had to change some of his code somewhere to fix it
17:29 Tene Whiteknight: can you describe what he changed in here?
17:29 Tene cotto: me too.
17:30 Whiteknight he was doing a PCT example, and had .HLL, and it couldn't find a method because it wasn't in the same .HLL
17:30 Whiteknight he'll have to give you the details, I'm too busy chatting online to be paying attention
17:31 cotto it's a good reason for him to cover what .hll and .namespace do
17:32 Whiteknight ah, the generated code from his compiler wasn't in the right .HLL but the method was
17:32 Tene ah
17:32 Tene kk
17:32 Tene Yeah, I really wanted to be there, but the timing didn't work out.  sad I'm missing it.
17:34 Infinoid So I tried to write a simpler test case for #757, and ran into an even weirder issue
17:34 Tene Man, I missed last yapc because I was moving too.  No more moving during June.
17:34 Infinoid src/thread.c:379: failed assertion 'interp'
17:34 Infinoid That function takes two interpreter arguments... interp is the second one
17:34 Whiteknight I was a parrot newbie last year in June and didn't even thinkabout going
17:34 Whiteknight plus I was a poor student
17:35 Tene I hope the ISP guy gets here soon. He's supposed to arrive today.
17:35 Tene Stuck on my phone until then.
17:35 Infinoid My ISP guy gets here tuesday
17:35 Whiteknight that stinks
17:35 Infinoid same here.
17:37 Whiteknight you could come over to my place and use the WIFI?
17:37 Whiteknight well, I'm not home again till Tuesday
17:38 Infinoid some weekend, perhaps :)
17:38 Infinoid I like punishing AT&T for having crappy service, anyway
17:40 Infinoid #3  0x00007fb2cb0317de in pt_thread_signal (self=0x143e690, interp=0x0) at src/thread.c:379
17:40 Whiteknight they haven't even gotten to your house yet and you know the service will be crappy
17:40 Whiteknight ??
17:41 Infinoid I have no idea what this code is doing, but I already hate it
17:42 Whiteknight ORLY?
17:42 purl YA RLY.
17:42 Whiteknight thanks purl
17:42 Infinoid oh, the ISP guy is from verizon.  AT&T is my the cell provider, hopefully fios will be better
17:42 Infinoid s/my the/my/
17:43 Whiteknight fios? Haven't you seen those comcast comercials that make fios look so bad?
17:43 Whiteknight aren't you swayed by that?
17:43 Infinoid no, and no
17:44 Whiteknight well take my word for it, the commercials suck
17:44 Whiteknight I don't know what TV is like on the west coast, but here on the east coast our commercials are horrible
17:45 Infinoid commercials are horrible on the west coast too.  I didn't own a TV there, and I don't own one here either
17:49 Whiteknight we have a TV but I watch very little of it
17:52 dalek tracwiki: v19 | Austin_Hastings++ | ParrotQuotes
17:52 dalek tracwiki: https://trac.parrot.org/parrot/wiki/Pa​rrotQuotes?version=19&amp;action=diff
17:56 Infinoid Ok, I've attached a very simple test case to TT #757.  https://trac.parrot.org/parrot/​attachment/ticket/757/tt757.pir
17:56 Infinoid comment out the .include line and it runs fine
17:58 Infinoid It seems there are some other corner cases with threads, I ran into another one while boiling down this one.  If you never call 'join'(), parrot crashes with the null interp I mentioned earlier
17:58 Infinoid That's not related to this issue tho
18:01 Zak joined #parrot
18:02 nopaste "Util" at 128.237.238.202 pasted "Magic for Hachi" (25 lines) at http://nopaste.snit.ch/16984
18:10 Tene Infinoid: I'm debating betwwweeen diving into 757 and working on pynie today
18:10 Tene after I'm done grocery shopping with the gf
18:11 cotto Util++ #more magic
18:12 davidfetter joined #parrot
18:12 Whiteknight urg, that's an ugly backtrace
18:13 Whiteknight Tene: What's the status of pynie?
18:13 davidfetter anybody @ yapc yet?
18:14 kid51 workshop in progress; > 30 in attendance
18:14 Util davidfetter: all of us sitting now in the Parrot workshop
18:14 davidfetter d'oh.
18:14 * davidfetter just got in. ORD was awful last night
18:14 Whiteknight DUNDUNDUN!
18:15 Tene Whiteknight: no classes at all
18:15 Whiteknight Util, you're here?
18:15 davidfetter wehre teh p4rr0t w0rksh0pz0rz?
18:15 Util Yes, only one against the back wall.
18:15 Whiteknight davidgetter: the newel-simon hall
18:15 Whiteknight look right
18:16 kid51 #15 on CMU map
18:16 Tene Whiteknight: basic functions and builtin stuff works okay
18:16 Whiteknight davidfetter: good luck finding it
18:16 Whiteknight Tene: okay, awesome
18:16 Whiteknight I still need to learn Python
18:17 hachi I walked until I was about to cross a bridge
18:17 davidfetter I HAZ CMU MAP.  ITZ CONFUZING
18:17 hachi turned on the last driveway
18:17 hachi walked back in there
18:17 Util davidfetter: major construction blocks all straight paths from dorms or University Center to Newell-Simon
18:17 hachi and found the building
18:17 Tene Whiteknight: I want to get classes and import working so that it can participate in HLL interop
18:17 Whiteknight davidfetter: the map is nothing. CMU is like a mix of the Labyrinth with an MC Escher painting, except the people building it were on drugs
18:18 * davidfetter thinks Whiteknight is doing a disservice to a lot of innocent drug users
18:18 Whiteknight ...i mean the bad drugs
18:18 cotto and the people building it are still here
18:18 Whiteknight they were on the bad drugs, not the good ones
18:19 Whiteknight seriously! The stupid construction people blocked off like all of the walkways
18:19 davidfetter o/` snortin' whiskey o/`
18:19 | I can
18:19 | fit
18:21 davidfetter hachi, heh
18:21 hachi wrong window, oh well :)
18:22 * davidfetter mischans to keep hachi company
18:24 davidfetter is there an officious yapc channel?
18:24 Whiteknight #yapc
18:25 davidfetter ah, i'd looked on fleanode 1st
18:25 Whiteknight yeah, fleanode is the worst
18:46 whoppix joined #parrot
18:47 particle[ventus] joined #parrot
18:59 kid51 http://en.wikipedia.org/wiki/Crossing_the_Chasm
19:20 donaldh joined #parrot
19:28 Infinoid In the GC, what the heck is a Sync* structure?
19:28 Infinoid I'm fixing some thread-related leaks, and cloning the interpreter calls Parrot_gc_add_pmc_sync which allocates some PMC_sync() thingy that is never freed.
19:28 Whiteknight Sync is a mutex
19:28 Infinoid oh, ok
19:28 Whiteknight it allows pmcs to be shared between threads without conflicts
19:29 Whiteknight at least, that's what I think it is
19:29 Whiteknight I've never used them beyond my fumbling with them in the gC
19:29 Infinoid well, lets see if I can free it without causing new crashes
19:29 Whiteknight Infinoid: I thought they were freed when pmc_ext was freed
19:29 Whiteknight Sync is attached to pmc_ext, so I would look there for them
19:30 Infinoid Maybe they are.  It's also possible that they're allocated twice
19:30 Infinoid src/pmc/parrotinterpreter.pmc line 68 is a comment, "we'd like to share the HLL data. Give it a PMC_sync structure if it doesn't have one already"
19:30 Infinoid ...but it's allocated without ever checking to see if one existed already
19:30 Whiteknight that's definitely possible, the GC is a shithole for that kind of stuff
19:31 Infinoid I'll throw in some tracing to see what the story is
19:31 Whiteknight okay, nice
19:32 Infinoid Yep, sometimes PMC_sync() was already nonzero
19:32 Infinoid Think I can safely return leaving the existing one intact, in that case?
19:33 * Infinoid does "make test" to find out.
19:36 Whiteknight yeah, it's definitely worth a test
19:36 Infinoid Cool.  All tests pass, 2 leaks plugged, 1 to go
19:36 Whiteknight that field should be initialized to 0 in the gc, so if it's nonzero it aready exists
19:36 Whiteknight Infinoid++
19:37 Infinoid The last one is the fun one :)
19:37 Infinoid ==22264== 62,895,904 (160,000 direct, 62,735,904 indirect) bytes in 200 blocks are definitely lost in loss record 40 of 192
19:37 Infinoid ==22264==    at 0x4C21FAB: calloc (vg_replace_malloc.c:279)
19:37 Infinoid ==22264==    by 0x4F14A70: mem_sys_allocate_zeroed (alloc_memory.c:105)
19:37 Infinoid ==22264==    by 0x4F9408C: parrot_alloc_vtables (vtables.c:132)
19:37 Whiteknight dealing with those Syncs is one of those tasks that I always figured i would get around to eventually
19:37 Infinoid (that's from a pir loop creating and joining 200 threads)
19:37 Whiteknight and eventually never comes because I've got more important stuff to do
19:38 Whiteknight holy crap
19:38 purl only in the Vatican, my friend
19:38 Whiteknight that's terrible
19:38 Infinoid I haven't touched Syncs at all; I just put in a check so I don't call Parrot_gc_add_pmc_sync if a value already existed
19:38 Whiteknight right, so they might not be freed in the GC when the pmc_ext is freed
19:39 Infinoid nah, they were just allocated twice.  That leak is plugged, vtables is next
19:39 cotto seen backe
19:39 purl I haven't seen 'backe', cotto
19:39 cotto seen bacek
19:39 purl bacek was last seen on #parrot 2 days, 11 hours, 3 minutes and 25 seconds ago, saying: cotto++ # Hooray! pmc_pct ftw!  [Jun 18 08:31:45 2009]
19:39 cotto more to come
19:39 Whiteknight src/gc/api.c:365
19:40 Whiteknight that's where Sync should be getting freed
19:40 Infinoid and it was
19:40 Whiteknight it's worth checking whether that condition matches all cases of existing Syncs
19:40 Infinoid but src/gc/api.c:397 was allocating a new Sync, even when a previous one existed, overwriting the old pointer
19:41 Infinoid that's what leaked
19:41 Whiteknight urg
19:41 Infinoid (at least, for this particular test case)
19:41 Whiteknight so that was the entire leak?
19:42 Infinoid My test case is just tt757.pir without the .include, in a 0-200 loop
19:42 Whiteknight ah, okay. I see that now
19:42 Whiteknight that is a pretty lousy function, isn't it?
19:42 Infinoid yeah, that was the second one of 3 leaks total
19:42 Infinoid I dunno.  I didn't spend much time trying to understand it :)
19:43 Whiteknight me either, I mostly prettied up the garbage code that was already there
19:44 Whiteknight that's probably going to fix some bugs too
19:44 Whiteknight since it was basically just overwriting a mutex which may have been locked
19:45 Infinoid hmm.  That sounds difficult to test
19:45 Infinoid but you're definitely right
19:45 Whiteknight the thread system definitely needs our patented version of cleanup though
19:45 Whiteknight no doubts about that
19:46 particle[ventus] joined #parrot
19:46 Whiteknight yay particle!
19:46 Whiteknight welcome back to the world of the internet
19:48 * Infinoid is tweaking ParrotInterpreter.init, and afraid that bats are going to fly out of my text editor and gouge my eyes out
19:50 davidfetter it was bat country
19:50 Infinoid oh, I love how ParrotInterpreter.destroy() makes no attempt to free up the Parrot_Interp whatsoever
19:51 Whiteknight that doesn't even seem like the right place to do it
19:51 Whiteknight :)
19:51 Infinoid well, nothing else is doing it in this case
19:51 Infinoid I'm just trying to figure out the code
19:52 Whiteknight is that memory being leaked?
19:52 Infinoid interp->vtables is (and a bunch of stuff being pointed to by that array)
19:52 Whiteknight hah, great
19:52 Infinoid that's the 62 megs I pasted above
19:52 Whiteknight We'll have to add some functions to the GC API to recursively free all that shit
19:53 Whiteknight because I'm sure we'll want to use that in more places then ParrotInterpreter.destroy
19:53 Whiteknight Is the vtables array the same for all interpreters, or can each interpreter have it's own list?
19:54 Whiteknight that doesn't make sense because then you wouldn't be able to share types between interpreters that have different arrays, because the integer indexes would be different
19:55 Infinoid I've leaked 200 vtables arrays, so each interpreter must have its own
19:55 Whiteknight okay, well that may be a source of your problems in the pipe thing
19:56 Whiteknight the arrays must be getting out of sync and when we try to share stuff it borks with great justice
19:56 Whiteknight for every zig
19:56 Infinoid hmm.  the rewrite alarm in my head is going off really loudly right now
19:56 Whiteknight ?
19:56 Infinoid this is the kind of thing you see which, when you're looking through, trying to perhaps tweak a subsystem, makes you want to just rewrite it from scratch
19:57 Whiteknight agreed
19:57 davidfetter technical debt
19:57 purl rumour has it technical debt is the debt you build up of stuff you have to do later. http://c2.com/cgi/wiki?TechnicalDebt or http://www.media-landscape.co​m/yapc/2006-06-26.AndyLester/
19:57 Whiteknight this is one of those cases where somebody said "let me just prototype this quickly", and then never got around to doing it better
19:57 davidfetter stfu, purl
19:57 purl it has been said that stfu is DCC SEND "FURBLELOGGER" 0 0 0 or eval: join"",map uc,map$_ eq"i"?"u":$_,("fist"=~/./sg)[2,3,0,1] or "Show Them Fury Unleashed" or St. Thomas Franciscan University
19:58 Infinoid I dunno, I give parrot a lot of credit for having working threads at all.  The fact that it is *almost* working as-is is pretty awesome.  I doubt I could do better in a reasonable amount of time
19:58 Infinoid but it is hard to read
19:59 Whiteknight does need major refactoring in any case
20:01 Infinoid the ParrotInterpreter PMC has a create_interp() helper function, but doesn't have any corresponding destroy_interp()
20:01 Infinoid Do you have any clues as to where these things are *supposed* to be freed?
20:01 Whiteknight probably in the destroy VTABLE. That's the right place to do it
20:01 Whiteknight it's just getting do'd
20:01 Infinoid the destroy VTABLE frees the attrs struct and that's all
20:01 Whiteknight well that's retarded
20:02 Infinoid I was going to say "confusing", but yes :)
20:02 Whiteknight retarded == confusing, for some values of retarded :)
20:03 davidfetter free() the malloc()s!
20:03 Whiteknight great, add some political activism to the GC
20:03 Infinoid it looks like the Interp structure itself is being freed just fine, somewhere (not anywhere in this file that I can find),but their ->vtables arrays are being leaked
20:03 Whiteknight Infinoid: Where are you looking, parrotinterpreter.pmc or parrothread.pmc?
20:04 flh joined #parrot
20:04 Infinoid And of course, valgrind doesn't tell me where the valid stuff is, so I don't really know where to look.
20:04 Infinoid parrotinterpreter.pmc
20:04 Whiteknight why do you think that the interpreter is being freed properly?
20:04 Infinoid Because it isn't reported as lost by valgrind
20:04 Infinoid Here, I'll give you the whole allocation trace
20:05 nopaste "Infinoid" at 65.18.171.17 pasted "leaked vtables arrays" (22 lines) at http://nopaste.snit.ch/16985
20:05 Infinoid apparently ParrotThread creates a ParrotInterpreter, and some bits of the Parrot_Interp contained by the ParrotInterpreter are freed and some aren't, and I have no idea where that happens.
20:06 Whiteknight check out src/thread.c:pt_thread_join
20:06 Whiteknight it's destroying an interp in there
20:06 Whiteknight at least, i think it is
20:07 Infinoid oh, awesome
20:09 Whiteknight AHA!
20:09 Whiteknight I found it
20:09 Whiteknight src/interp/inter_create.c:435
20:09 Whiteknight it only destroys the vtables if the parent interp is null
20:09 Whiteknight but for a thread, this isn't the case
20:10 Whiteknight parrot_free_vtables is the function to do it I think
20:10 Whiteknight (assuming it's named properly)
20:10 nopaste "infinoid" at 65.18.171.17 pasted "full leak check log, grep for "definitely lost" and look for the one that has 200 blocks" (5996 lines) at http://nopaste.snit.ch/16986
20:10 Infinoid oh, nice.  I'll try that as soon as this silly nopaste goes through
20:10 Infinoid there we go
20:11 Whiteknight I don't know how deep the vtable copy goes, so parrot_free_vtables may do too much
20:11 Whiteknight but if it's a completely deep copy, that's the function to call I think
20:12 Infinoid I'm doing a make test now, then I'll retry valgrind
20:12 Whiteknight okay, awesome
20:12 Infinoid well spotted btw, Whiteknight++
20:13 Infinoid there's an ifelse there, and the former block has a whole lot more stuff in it than the latter block.  I have to wonder what else is being overlooked
20:13 Whiteknight I had a suspicion it was somewhere in thread.c, if it was being freed at all and if it wasn't happening in parrotinterpreter.pmc:destroy()
20:13 Infinoid parrotinterpreter.pmc:destroy() is misleadingly useless
20:14 Infinoid nice!  ==368==    definitely lost: 58 bytes in 2 blocks.
20:14 Whiteknight I have to think that this is far too eager, the memory should be managed in destroy() by the GC, not managed manually by the threading system
20:14 Infinoid You've just cleaned up 62 megs of leaked memory
20:14 Whiteknight !!!
20:15 Infinoid (and yes, "make test" still works just fine)
20:15 Whiteknight Infinoid++
20:15 Infinoid No, Whiteknight++
20:15 Whiteknight everybody++
20:15 Infinoid karma everybody
20:15 purl everybody has karma of 5
20:16 Whiteknight so 200 threads started and joining only leaks 58 bytes?
20:16 Infinoid yes
20:16 Whiteknight fantastic
20:16 Infinoid there's an IMCC leak where it strdup()s the pir filename and doesn't free it
20:16 Whiteknight becauase that means it's not an issue with the threads at all
20:17 Infinoid and Parrot_gc_add_pmc_sync() still leaks once, rather than 201 times
20:17 Whiteknight really? wtf?
20:17 AndyA joined #parrot
20:17 Infinoid I don't know.  The previous value of PMC_sync() is null, I haven't dug into that one yet because the numbers were smaller
20:17 Infinoid I'm going to commit what I have and then do a profiling run (which was my goal all along)
20:19 Whiteknight in Parrot_gc_free_pmc_ext, remove the condition PObj_is_PMC_shared_TEST(p)
20:20 Whiteknight that's not necessary and might result in false negatives
20:21 Infinoid I think those would show up in valgrind
20:21 Whiteknight okay, nevermind then
20:22 Whiteknight so there's another leak outstanding that's not showing in valgrind?
20:22 Infinoid sorry, I tend to trust tools that are smarter than I am :)
20:22 Infinoid well, valgrind shows 2... I'm unaware of any others
20:22 Whiteknight ok
20:23 Infinoid it should be blindingly obvious at this point that we don't use threads nearly enough
20:23 Whiteknight a lot of that I'm sure is because the implementation is lousy
20:24 Whiteknight and none of the HLLs are blocking on it
20:24 Infinoid Right.  If we used it every day, we'd stomp out the bugs much faster
20:25 Whiteknight That's why we need a pure-parrot test harness
20:25 * Infinoid profiles thread creation and destruction
20:25 Infinoid hmm, true
20:25 Whiteknight parrot-test -j9 would kick ass
20:25 dalek parrot: r39675 | Infinoid++ | trunk/src (5 files):
20:25 dalek parrot: Fix 3 thread-related leaks.
20:25 dalek parrot: 1.  Fix a leak in ParrotRunningThread.  The attrs array was allocated but never freed, because the active_destroy flag wasn't set.
20:25 dalek parrot: 2.  Parrot_gc_add_pmc_sync() allocates a new PMC_sync() value without checking to see if one already existed.  Add a check, only call it when we don't already have one.
20:25 dalek parrot: 3.  Parrot_really_destroy() did not free the vtables[] array in the case where interp->parent_interpreter was set.  The vtables array is per-thread, so it needs to be freed regardless.  Whiteknight++ for finding this one.
20:25 dalek parrot: In a simple pir test (based on the tt757 test case) which created and joined a thread 200 times, this patch fixes 62 megs of leaked memory.
20:25 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39675/
20:26 Whiteknight awesome
20:26 Infinoid I'd love it if you could sanity check that, it touches several bits of deep core code
20:28 Infinoid oh, wow.  So I profiled 200 thread creations and destructions, and found that 47% of the time was spent in Parrot_gc_merge_buffer_pools
20:28 Infinoid Is that something new, or just something specific to the test case?
20:29 Infinoid it was run 3200 times
20:31 Whiteknight all tests pass!
20:31 purl Time to write more tests!
20:32 Whiteknight purl never said something so true
20:32 purl Whiteknight: sorry...
20:32 Whiteknight it's okay purl, I'm sure it will never happen again
20:32 Infinoid heh
20:33 Whiteknight Infinoid: I think the check for whether we have a Sync should happen in Parrot_gc_add_pmc_sync
20:34 Whiteknight A similar check should happen in Parrot_gc_add_pmc_ext
20:35 Whiteknight the GC needs so much work...
20:36 Infinoid Whiteknight: I did end up moving the check into Parrot_gc_add_pmc_sync, but it looks like I forgot to update the commit message
20:36 Whiteknight ah, okay
20:36 Whiteknight i didn't refresh the file in my editor
20:40 Infinoid I've gone back to looking at Parrot_really_destroy.  I'll bet if a thread loads a dynop, that won't be freed
20:40 Infinoid (not that I have any idea how one loads a dynop)
20:41 Whiteknight (or how one frees a dynop)
20:42 dalek parrot: r39676 | whiteknight++ | trunk/src/gc/api.c:
20:42 dalek parrot: [gc] following the lead set by Infinoid++, add a quick check to the gc to prevent allocating a pmc_ext when one has already been allocated.
20:42 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39676/
20:42 dalek parrot: r39677 | whiteknight++ | trunk/src/gc/api.c:
20:42 dalek parrot: [gc] the last commit, plus codingstd
20:42 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39677/
20:44 Whiteknight I bet that last commit will help simplify some for the clone code
20:46 * Infinoid wants a commit bit to the english language grammar.  "sillily" needs to be a word
20:47 dukeleto joined #parrot
20:47 * davidfetter words sillily
20:48 * cotto dewords 'words' as a verb
20:48 cotto wait.  that didn't do what I wanted it to.
20:48 Infinoid wordificates!
20:48 davidfetter Infinoid, there hasn't been a central repo for english grammar in quite some time, although many have tried to claim to be it
20:49 davidfetter it went DSCM in the 1770s, approx
20:49 Infinoid wordulates?  wordifies, enwordenates
20:49 Infinoid the current grammar definitely has some design bugs
20:50 s1n_yapc joined #parrot
20:51 Tene Sweet, internet access at home.
20:51 davidfetter good to have :)
20:53 Infinoid Ok.  So Parrot_really_destroy was called 200 times, each of those called Parrot_gc_merge_header_pools twice (400 total), and that calls Parrot_gc_merge_buffer_pools 8 times each (3200 total), and that's where half of parrot's time was spent for this test
20:53 kid51 joined #parrot
20:53 Infinoid For heavy thread loads, that's going to be a huge bottleneck.  Fortunately, we don't have any of those loads yet
20:55 dalek parrot: r39678 | whiteknight++ | trunk/src (2 files):
20:55 dalek parrot: [pmc] now that we're sanely checking for existing pmc_exts in the GC, we can remove some checks elsewhere
20:55 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39678/
20:57 Infinoid Rain, rain, rain.  The more it rains, the less I want to go outside, rain is good for parrot
20:57 dukeleto Infinoid: yeah, the raininess of PDX has a lot to do with how much coding gets done here
20:58 dalek parrot: r39679 | whiteknight++ | trunk/src/pmc.c:
20:58 dalek parrot: [pmc] more cleanups
20:58 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39679/
20:58 dalek parrot: r39680 | cotto++ | trunk/lib/Parrot/Pmc2c/PMCEmitter.pm:
20:58 dalek parrot: [pmc2c] simplify code to assume that if a PMC has parents, default will be the first (if it's there at all)
20:58 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39680/
20:59 zak_ joined #parrot
21:00 Whiteknight I'm getting closer and closer to starting a threading_cleanups branch now
21:02 s1n_yapc what's the patch submission process now that parrot is not using rt?
21:03 Whiteknight parrot is on trac now
21:03 Whiteknight trac.parrot.org
21:03 Whiteknight same idea, different interface
21:04 s1n_yapc just attach it directly as a patch? include it in the message?
21:04 Whiteknight when creating a new ticket there shold be a button to attach a file
21:05 Whiteknight or you can put it directly in the ticket. Use {{{ ... }}} to code format it
21:05 s1n_yapc Whiteknight: what's the preferred method?
21:06 Whiteknight no preference that I'm aware of, although if the patch is huge it's probably better to attach a file
21:06 kid51 It's strictly a web interface -- no email at this time --.  There is an Attach File button which is best for true patches, as it creates a download link for other users.
21:06 kid51 Follow {{{ }}} instructions for smaller bits of code.
21:07 * Coke skims through review.
21:07 s1n_yapc kid51, Whiteknight: thanks
21:07 Whiteknight no problem
21:09 Coke is pvmw today?
21:09 s1n_yapc Coke: yes
21:09 Coke enjoy.
21:10 Coke glad to see memory leaks being tracked. partcl still has leaks, no doubt, if folks are bored. =-)
21:10 s1n_yapc how do we specify an svn revision rather than a release?
21:10 Coke (and a ton of other blockers.)
21:10 Coke s1n_yapc: specify it where?
21:10 s1n_yapc Coke: in a new ticket
21:11 Coke say "trunk"
21:11 kid51 In trak, r12345 translatest to hyperlink to SVN commit 12345
21:11 Coke mention the revision # in the body of the ticket.
21:11 Coke right. just say r14135 in the ticket.
21:12 Infinoid Coke_PS3: If you can boil those down to (preferably simple) pir test cases, I'll take a look
21:12 kid51 Actually, that should be TT #12345
21:12 kid51 Strike last statement; last statement is way you refer to other Trac tickets
21:13 kid51 r12345 if for SVN
21:13 kid51 When in doubt, preview
21:13 dalek TT #779 created by s1n++: [tools] modify fetch_languages.pl to only fetch a specific language
21:13 s1n_yapc kid51: the r12345 does in fact make a link
21:13 Infinoid When not in doubt, preview anyway :)
21:13 s1n_yapc dalek now posts new TT?
21:19 dalek parrot: r39681 | whiteknight++ | branches/io_cleanups/src (2 files):
21:19 dalek parrot: [io_cleanups] add socket to the list of types that can be handled by Parrot_io_close
21:19 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39681/
21:22 dalek parrot: r39682 | cotto++ | branches/pmc_pct/compilers/pmcc/src (2 files):
21:22 dalek parrot: [pmcc] put all VTABLE functions in vtables{'default'} to allow a logical place for variant vtables
21:22 dalek parrot: review: https://trac.parrot.org/parrot/changeset/39682/
21:27 Infinoid s1n_yapc: Yeah, opens and closes, not comments or updates
21:28 s1n_yapc Infinoid: good to know
21:28 s1n_yapc is there a formal process to becoming a cage cleaner?
21:28 Infinoid Cleaning cages is a good start :)  Nothing formal though
21:29 s1n_yapc is a CLA required?
21:29 s1n_yapc are the specific people that act as "guides"
21:29 Infinoid CLA is required for a committer.  People generally start out just pushing patches here using nopaste.snit.ch though
21:29 Infinoid commit access comes later
21:29 Infinoid There is a docs/project/cage_cleaners_guide.pod if you haven't already read that
21:30 s1n_yapc Infinoid: i'll start there and ask more questions later
21:30 Infinoid If you run into anything that seems confusing, don't hesitate to ask.  I'm not sure how up to date it is
21:34 Whiteknight yeah, send in patches, and when we like what you do we throw all sorts of permissions and responsibilies at you
21:41 cotto The biggest qualification for being a cage cleaner is having a patch that you want to get applied.
21:41 cotto also, an Internet connection helps
21:42 s1n_yapc cotto: a computer is a prereq for the internet connection though
21:43 cotto touche
21:43 cotto seen allison
21:43 purl allison was last seen on #parrot 4 days, 1 hours, 3 minutes and 46 seconds ago, saying: 's just temporary  [Jun 16 20:35:44 2009]
22:12 magnachef joined #parrot
22:17 cotto joined #parrot
22:18 tmoertel joined #parrot
22:33 rg1 joined #parrot
22:42 ZeroForce joined #parrot
23:14 burmas joined #parrot
23:20 donaldh joined #parrot
23:43 MoC joined #parrot

| Channels | #parrot index | Today | | Search | Google Search | Plain-Text | summary

Parrot | source cross referenced