Parrot 1.3.0 "Andean Swift" released | parrot.org | Parrot VM Workshop, Pittsburgh, June 20-21
Set by moderator on 16 June 2009.
00:12 AndyA joined 00:30 bacek_ joined 00:43 ronsvg joined
ronsvg First I tried: 00:43
ron@zoe:~$ git clone git://github.com/rakudo/rakudo.git 00:44
Initialized empty Git repository in /home/ron/rakudo/.git/
remote: Counting objects: 16457, done.
remote: Compressing objects: 100% (4671/4671), done.
remote: Total 16457 (delta 11974), reused 15717 (delta 11445)
Then this died:
ron@zoe:~/rakudo$ perl Configure.pl --gen-parrot
Generating Parrot ...
/usr/bin/perl build/gen_parrot.pl
Checking out Parrot r39599 via svn...
svn: OPTIONS of 'svn.parrot.org/parrot/trunk': could not connect to server (svn.parrot.org)
the location of parrot_config to be used to build Rakudo Perl.
Building Parrot ...
Unable to locate parrot_config
To automatically checkout (svn) and build a copy of parrot r39599,
try re-running Configure.pl with the '--gen-parrot' option.
Or, use the '--parrot-config' option to explicitly specify
the location of parrot_config to be used to build Rakudo Perl.
Instructions taken from: rakudo.org/how-to-get-rakudo 00:45
00:49 ronsvg left
Coke looks like when gen-parrot ran, there was a connection problem to the parrot svn server. 00:53
I just did an svn up; should be ok now.
00:58 MoC joined 01:07 dukeleto joined 02:25 rakudohudson joined 02:42 Zak joined 03:06 zak_ joined 03:17 magnachef joined 03:20 donaldh joined
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:20
03:51 dduncan joined 05:02 Zak joined 05:04 dduncan left 05:40 Theory joined 05:53 sparkymat joined 06:01 amuck joined 06:04 zak_ joined 06:28 dukeleto joined 06:30 petdance joined 06:32 iblechbot joined
dalek rrot: r39673 | petdance++ | trunk (2 files):
turns out that key_string can return NULL.
06:32
07:20 donaldh joined 08:23 dukeleto joined 08:45 amuck_ joined
mikehh all tests PASS at r39673 - pre/post config, smoke, fulltest - Ubuntu 7.04 i386 10:23
dalek a: aaff848 | fperrad++ | src/lib/luastring.pir:
fix a duplicate identifier .param/.local
10:25
10:30 iblechbot joined 11:20 donaldh joined 11:27 darbelo joined 11:32 masak joined 12:01 sparkymat joined
sparkymat How is Cardinal coming along? 12:07
darbelo I think it's being developed at github.com/cardinal/cardinal/tree/master now. 12:09
Don't know how active it is, you should probably ask fperrad if he's arround. 12:12
12:16 viklund_ joined
cotto I thought cardinal was Tene's project. 12:27
sparkymat I thought so too.. I was hoping that Tene was around.. 12:28
12:29 MoC joined
cotto you can always msg him 12:30
sparkymat here?
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.
cotto yeah. just say 'msg Tene Have a nice day' or something and purl will relay the message once he says something
cotto wanders off to pvmw 12:33
rblackwe Good luck to all looking for the Parrot VM Workshop. 12:50
12:58 cotto joined
jdv79_ yeah, looks like = vs := - thanks 12:59
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:00
Infinoid reenables polyglotbot's crontab 13:01
rakudo: say %*VM<config><VERSION> 13:02
polyglotbot OUTPUT[1.3.0␤] 13:03
Infinoid rakudo: say %*VM<config><revision>
polyglotbot OUTPUT[Parrot VM: Can't stat languages/perl6/perl6.pbc, code 2.␤main: Packfile loading failed␤]
Infinoid ah, it's rebuilding rakudo now
13:03 s1n_yapc joined
Infinoid rakudo: say %*VM<config><revision> 13:05
polyglotbot OUTPUT[39673␤]
13:09 kid51 joined 13:10 Austin_Hastings joined
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:10
but the config/makefile system needs some help for running HLLs on non-installed parrots before that becomes useful 13:11
kid51 Parrot VM Workshop now underway 13:12
The president speaks!
Austin_Hastings Aww, man. First, no food. Now the "dog ate my homework." 13:13
13:16 magnachef joined 13:19 Austin_Hastings left
rblackwe Organizing for PVMW lunch etherpad.com/0iwPLcPjMG 13:24
feel free to join in.
13:32 magnachef joined 13:33 McC joined 13:45 hachi joined 13:49 mikecanz joined
dalek rrot: r39674 | cotto++ | trunk/examples/tutorial (15 files):
[examples] use $P0 = new foo? notation in examples
14:10
cotto That's the preferred notation, for any of you at pvmw. 14:11
s1n_yapc cotto: what's wrong with the previous notation? 14:16
14:17 jhorwitz joined
jhorwitz virtually looks in at PVMW 14:18
cotto pmichaud will cover it later. Both work fine for now.
14:19 Whiteknight joined
Whiteknight finally at YAPC! 14:21
cotto Yay! Good luck finding the pvmw. 14:23
Whiteknight I know, it took me over 45 minutes!
14:24 skids joined
Whiteknight this campus is a goddamn nightmare 14:24
rblackwe Whiteknight: thank Mr. Gates and his new building. 14:25
Finding PVWM is the Parrot fitness plan
14:26 mj41_ joined 14:51 mikecanz joined 14:56 ttbot joined, mj41 joined
Whiteknight Infinoid: ping 15:14
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
nopaste "mikehh" at 92.30.51.48 pasted "Some test timings for coretest and on other runcores" (37 lines) at nopaste.snit.ch/16979 15:47
dalek TT #778 created by whiteknight++: Make FileHandle Subclassable 15:49
Whiteknight mikehh: how do those numbers compare to what they were last month? 15:50
or do you not have comparisons?
mikehh looking at this the rugular core seems to be fastest on the tests (if you subtract the other tests it runs)
Whiteknight - I think they are quite a bit faster - let me look at some of my logs 15:51
Whiteknight I'm very surprised that -f outperformed -S 15:53
I'm also surprised that -C and -j ran as fast as they did
for the test suite with lots of little programs, -C and -j have a lot of extra overhead that should slow them down
Whiteknight is always happy to see things going faster 16:07
16:10 Theory joined 16:15 Psyche^ joined
Infinoid Whiteknight: since I haven't introduced a PipeHandle type yet, I can't really complain about FileHandle pipes yet 16:16
Whiteknight Infinoid: We have the io_cleanups branch to play in now, if you want to start working on that there 16:26
I'm happy to help, but I think you have the vision for it 16:27
16:29 burmas joined
Whiteknight I keep looking at the pipe code, just waiting to chop that up into little bits 16:33
er, not pipe. "sockets". It's the sockets code I want to chop up 16:37
Infinoid heh, yeah
socket subclasses will be fun
actually, pipes work fine as far as I can tell (which isn't far)
it's threaded tests I'm having a problem with
Whiteknight threaded tests? which ones? 16:38
Infinoid testing Pipe requires a couple of threads
Whiteknight hey, are you at YAPC?
or, going to YAPC?
purl See : going to yapc::na or yapc::whatever or cwest, uri, DrForr or dha
Infinoid nope, I'm at home in bed
the sound of rain makes me tired. :)
Whiteknight yeah, it was raining really hard during my drive out here 16:39
I spend about three hours in the car wishing I was back in bed
and then another two hours in the car wishing I was in a McDonalds getting some food
Infinoid in 100 years, they'll have little mini-mcdonalds built right into your glove box
16:40 MoC joined
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
Whiteknight that would be sweet 16:42
Infinoid that would be horrible for our lifespan as a species :)
you'd have people who could no longer squeeze out of their cars (or hoverjets or whatever) 16:45
anyway, here's my problem with pipes 16:46
nopaste "infinoid" at 65.18.171.17 pasted "The Patch" (388 lines) at nopaste.snit.ch/16980 16:47
cotto <<
nopaste "infinoid" at 65.18.171.17 pasted "The Test" (71 lines) at nopaste.snit.ch/16981
"infinoid" at 65.18.171.17 pasted "The Fail" (26 lines) at nopaste.snit.ch/16982
dalek rtcl: r509 | coke++ | branches/tclstring:
Attempt to subclass our string-like PMC with a pir class.
16:51
rtcl: r510 | coke++ | branches/tclstring/ (7 files):
- rename tclstring pmc to tclstringpmc

  - simplify the pir_compiler test to reliably pre-load the tcl library for the
test.
16:56 cognominal joined
Whiteknight THE FAIL! 16:56
purl the fail is strong in you
Whiteknight wow, that's a shitty failure 16:58
Infinoid I'm not really sure where to start...
Whiteknight what class name is it looking for there? 16:59
and are you sure that Pipe and PipeHandle are being compiled into the .so? 17:01
Infinoid 'Test;Builder'
Whiteknight did you make realclean after you added those?
Infinoid (gdb) print interp->vtables[enum_class_Pipe]->init
$4 = (init_method_t) 0x7fbe2aeeed60 <Parrot_Pipe_init>
yes.
Whiteknight okay then
that shut me up 17:02
Infinoid I think it's failing to clone a pir class ... somehow
Whiteknight so yeah, run in gdb, put a break point on Parrot_Confess, and figure out what that class_name string is
Infinoid I haven't used parrot threads for much
class_name is 'Test;Builder'
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)
Whiteknight just adding those two pmcs causes this failure?
that's retarded
Infinoid well, I'm probably misusing the threads api somehow in my test 17:04
17:04 s1n_yapc joined
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
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
ok. is there a better way to spawn a thread to manage the other end of the pipe for my test? :)
(some variant of fork() which also works on win32 would work equally well for me) 17:06
Whiteknight yeah, creating the new thread in the test must not properly clone the class hash 17:07
Infinoid thing is, I nabbed the thread-spawning syntax directly from the "thread type 1" test in t/pmc/threads.t 17:08
but that test is written in perl, so I guess it didn't load Test;Builder.
Whiteknight I assume Test;Builder is being included from Test_more.pir? 17:12
Infinoid load_bytecode 'Test/Builder.pbc' 17:13
Whiteknight doesn't know a lot about testing, including parrot's test environment
Infinoid Test/More and Test/Builder both seem to be loaded as pbc
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
Whiteknight ah, that's what I was trying to figure out. Okay
what namespace is it loaded into? 17:15
and is the thread running in that namespace?
Infinoid .namespace [ 'Test'; 'Builder' ]
and I doubt it.
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 :)
Whiteknight I usually don't learn a lot about system until I decide it's time to completely rewrite it :)
Infinoid heh, same here
maybe I can spawn the thread *before* loading the test libs 17:17
Whiteknight yeah, any number of crackpot ideas could work
Infinoid no clean way to report failure, tho 17:18
Whiteknight urg?
purl rumour has it urg is basically a schwarztian + a pass to normalize the keys to managable values as I read it
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
Infinoid but earlier in the same test, I check whether creating pipes work... so I'd have to do that first pipe blind 17:18
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
Infinoid I think it might crash before executing that part, but I'll try it
Whiteknight do or do not. There is no try 17:20
Infinoid crash or crash not, there is no do 17:21
it crashed in the same spot...
Whiteknight damnit
maybe threads are just TEH SUCK right now
Infinoid I don't think it's getting through the run_clone() method 17:22
they seem to be a work in progress
Whiteknight what does that method do anyway?
Infinoid it's supposed to run a pir function (specified by name) in a separate thread
Whiteknight I'll probably end up doing some thread cleanup work when I get started on AIO
which should be soon
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
I want to use the same kind of threads for socket tests, too
that said, it looks like a fairly deep rabbit hole, which is why I haven't looked too far into it 17:24
Tene Infinoid: sounds like the problem I reported earlier 17:25
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 :)
Whiteknight If nobody owns it, assign it to me
Tene Infinoid: name is something like cannot create thread when hll loaded
Infinoid ok. I guess I can simplify that further. No hll here, just a pir test class 17:27
ah, #757: Problem with threads and HLLs
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
Tene Whiteknight: explain more?
cotto wish you were here
purl hmmm... wish you were here is a good easy one
Whiteknight the .HLL directive broke his PCT demonstration
he had to change some of his code somewhere to fix it 17:29
Tene Whiteknight: can you describe what he changed in here?
cotto: me too.
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
he'll have to give you the details, I'm too busy chatting online to be paying attention
cotto it's a good reason for him to cover what .hll and .namespace do 17:31
Whiteknight ah, the generated code from his compiler wasn't in the right .HLL but the method was 17:32
Tene ah
kk
Yeah, I really wanted to be there, but the timing didn't work out. sad I'm missing it.
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.
Infinoid src/thread.c:379: failed assertion 'interp'
That function takes two interpreter arguments... interp is the second one
Whiteknight I was a parrot newbie last year in June and didn't even thinkabout going
plus I was a poor student
Tene I hope the ISP guy gets here soon. He's supposed to arrive today. 17:35
Stuck on my phone until then.
Infinoid My ISP guy gets here tuesday
Whiteknight that stinks
Infinoid same here.
Whiteknight you could come over to my place and use the WIFI? 17:37
well, I'm not home again till Tuesday
Infinoid some weekend, perhaps :) 17:38
I like punishing AT&T for having crappy service, anyway
#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
??
Infinoid I have no idea what this code is doing, but I already hate it 17:41
Whiteknight ORLY? 17:42
purl YA RLY.
Whiteknight thanks purl
Infinoid oh, the ISP guy is from verizon. AT&T is my the cell provider, hopefully fios will be better
s/my the/my/
Whiteknight fios? Haven't you seen those comcast comercials that make fios look so bad? 17:43
aren't you swayed by that?
Infinoid no, and no
Whiteknight well take my word for it, the commercials suck 17:44
I don't know what TV is like on the west coast, but here on the east coast our commercials are horrible
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:45
Whiteknight we have a TV but I watch very little of it 17:49
dalek tracwiki: v19 | Austin_Hastings++ | ParrotQuotes 17:52
tracwiki: trac.parrot.org/parrot/wiki/Parrot...ction=diff
Infinoid Ok, I've attached a very simple test case to TT #757. trac.parrot.org/parrot/attachment/.../tt757.pir 17:56
comment out the .include line and it runs fine
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
That's not related to this issue tho
18:01 Zak joined
nopaste "Util" at 128.237.238.202 pasted "Magic for Hachi" (25 lines) at nopaste.snit.ch/16984 18:02
Tene Infinoid: I'm debating betwwweeen diving into 757 and working on pynie today 18:10
after I'm done grocery shopping with the gf
cotto Util++ #more magic 18:11
18:12 davidfetter joined
Whiteknight urg, that's an ugly backtrace 18:12
Tene: What's the status of pynie? 18:13
davidfetter anybody @ yapc yet?
kid51 workshop in progress; > 30 in attendance 18:14
Util davidfetter: all of us sitting now in the Parrot workshop
davidfetter d'oh.
davidfetter just got in. ORD was awful last night
Whiteknight DUNDUNDUN!
Tene Whiteknight: no classes at all 18:15
Whiteknight Util, you're here?
davidfetter wehre teh p4rr0t w0rksh0pz0rz?
Util Yes, only one against the back wall.
Whiteknight davidgetter: the newel-simon hall
look right
kid51 #15 on CMU map 18:16
Tene Whiteknight: basic functions and builtin stuff works okay
Whiteknight davidfetter: good luck finding it
Tene: okay, awesome
I still need to learn Python
hachi I walked until I was about to cross a bridge 18:17
davidfetter I HAZ CMU MAP. ITZ CONFUZING
hachi turned on the last driveway
walked back in there
Util davidfetter: major construction blocks all straight paths from dorms or University Center to Newell-Simon
hachi and found the building
Tene Whiteknight: I want to get classes and import working so that it can participate in HLL interop
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
davidfetter thinks Whiteknight is doing a disservice to a lot of innocent drug users 18:18
Whiteknight ...i mean the bad drugs
cotto and the people building it are still here
Whiteknight they were on the bad drugs, not the good ones
seriously! The stupid construction people blocked off like all of the walkways 18:19
davidfetter o/` snortin' whiskey o/`
| I can
fit
davidfetter hachi, heh 18:21
hachi wrong window, oh well :)
davidfetter mischans to keep hachi company 18:22
is there an officious yapc channel? 18:24
Whiteknight #yapc
davidfetter ah, i'd looked on fleanode 1st 18:25
Whiteknight yeah, fleanode is the worst
18:46 whoppix joined 18:47 particle[ventus] joined
kid51 en.wikipedia.org/wiki/Crossing_the_Chasm 18:59
19:20 donaldh joined
Infinoid In the GC, what the heck is a Sync* structure? 19:28
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.
Whiteknight Sync is a mutex
Infinoid oh, ok
Whiteknight it allows pmcs to be shared between threads without conflicts
at least, that's what I think it is 19:29
I've never used them beyond my fumbling with them in the gC
Infinoid well, lets see if I can free it without causing new crashes
Whiteknight Infinoid: I thought they were freed when pmc_ext was freed
Sync is attached to pmc_ext, so I would look there for them
Infinoid Maybe they are. It's also possible that they're allocated twice 19:30
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"
...but it's allocated without ever checking to see if one existed already
Whiteknight that's definitely possible, the GC is a shithole for that kind of stuff
Infinoid I'll throw in some tracing to see what the story is 19:31
Whiteknight okay, nice
Infinoid Yep, sometimes PMC_sync() was already nonzero 19:32
Think I can safely return leaving the existing one intact, in that case?
Infinoid does "make test" to find out. 19:33
Whiteknight yeah, it's definitely worth a test 19:36
Infinoid Cool. All tests pass, 2 leaks plugged, 1 to go
Whiteknight that field should be initialized to 0 in the gc, so if it's nonzero it aready exists
Infinoid++
Infinoid The last one is the fun one :) 19:37
==22264== 62,895,904 (160,000 direct, 62,735,904 indirect) bytes in 200 blocks are definitely lost in loss record 40 of 192
==22264== at 0x4C21FAB: calloc (vg_replace_malloc.c:279)
==22264== by 0x4F14A70: mem_sys_allocate_zeroed (alloc_memory.c:105)
==22264== by 0x4F9408C: parrot_alloc_vtables (vtables.c:132)
Whiteknight dealing with those Syncs is one of those tasks that I always figured i would get around to eventually
Infinoid (that's from a pir loop creating and joining 200 threads)
Whiteknight and eventually never comes because I've got more important stuff to do
holy crap 19:38
purl only in the Vatican, my friend
Whiteknight that's terrible
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
Whiteknight right, so they might not be freed in the GC when the pmc_ext is freed
Infinoid nah, they were just allocated twice. That leak is plugged, vtables is next 19:39
cotto seen backe
purl I haven't seen 'backe', cotto
cotto seen bacek
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]
cotto more to come
Whiteknight src/gc/api.c:365
that's where Sync should be getting freed 19:40
Infinoid and it was
Whiteknight it's worth checking whether that condition matches all cases of existing Syncs
Infinoid but src/gc/api.c:397 was allocating a new Sync, even when a previous one existed, overwriting the old pointer
that's what leaked 19:41
Whiteknight urg
Infinoid (at least, for this particular test case)
Whiteknight so that was the entire leak?
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
that is a pretty lousy function, isn't it?
Infinoid yeah, that was the second one of 3 leaks total
I dunno. I didn't spend much time trying to understand it :)
Whiteknight me either, I mostly prettied up the garbage code that was already there 19:43
that's probably going to fix some bugs too 19:44
since it was basically just overwriting a mutex which may have been locked
Infinoid hmm. That sounds difficult to test 19:45
but you're definitely right
Whiteknight the thread system definitely needs our patented version of cleanup though
no doubts about that
19:46 particle[ventus] joined
Whiteknight yay particle! 19:46
welcome back to the world of the internet
Infinoid is tweaking ParrotInterpreter.init, and afraid that bats are going to fly out of my text editor and gouge my eyes out 19:48
davidfetter it was bat country 19:50
Infinoid oh, I love how ParrotInterpreter.destroy() makes no attempt to free up the Parrot_Interp whatsoever
Whiteknight that doesn't even seem like the right place to do it 19:51
:)
Infinoid well, nothing else is doing it in this case
I'm just trying to figure out the code
Whiteknight is that memory being leaked? 19:52
Infinoid interp->vtables is (and a bunch of stuff being pointed to by that array)
Whiteknight hah, great
Infinoid that's the 62 megs I pasted above
Whiteknight We'll have to add some functions to the GC API to recursively free all that shit
because I'm sure we'll want to use that in more places then ParrotInterpreter.destroy 19:53
Is the vtables array the same for all interpreters, or can each interpreter have it's own list?
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:54
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
the arrays must be getting out of sync and when we try to share stuff it borks with great justice 19:56
for every zig
Infinoid hmm. the rewrite alarm in my head is going off really loudly right now
Whiteknight ?
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
Whiteknight agreed 19:57
davidfetter technical debt
purl rumour has it technical debt is the debt you build up of stuff you have to do later. c2.com/cgi/wiki?TechnicalDebt or www.media-landscape.com/yapc/2006-0...ndyLester/
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
davidfetter stfu, purl
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
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
but it is hard to read
Whiteknight does need major refactoring in any case 19:59
Infinoid the ParrotInterpreter PMC has a create_interp() helper function, but doesn't have any corresponding destroy_interp() 20:01
Do you have any clues as to where these things are *supposed* to be freed?
Whiteknight probably in the destroy VTABLE. That's the right place to do it
it's just getting do'd
Infinoid the destroy VTABLE frees the attrs struct and that's all
Whiteknight well that's retarded
Infinoid I was going to say "confusing", but yes :) 20:02
Whiteknight retarded == confusing, for some values of retarded :)
davidfetter free() the malloc()s! 20:03
Whiteknight great, add some political activism to the GC
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
Whiteknight Infinoid: Where are you looking, parrotinterpreter.pmc or parrothread.pmc?
20:04 flh joined
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
parrotinterpreter.pmc
Whiteknight why do you think that the interpreter is being freed properly?
Infinoid Because it isn't reported as lost by valgrind
Here, I'll give you the whole allocation trace
nopaste "Infinoid" at 65.18.171.17 pasted "leaked vtables arrays" (22 lines) at 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.
Whiteknight check out src/thread.c:pt_thread_join 20:06
it's destroying an interp in there
at least, i think it is
Infinoid oh, awesome 20:07
Whiteknight AHA! 20:09
I found it
src/interp/inter_create.c:435
it only destroys the vtables if the parent interp is null
but for a thread, this isn't the case
parrot_free_vtables is the function to do it I think 20:10
(assuming it's named properly)
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 nopaste.snit.ch/16986
Infinoid oh, nice. I'll try that as soon as this silly nopaste goes through
there we go
Whiteknight I don't know how deep the vtable copy goes, so parrot_free_vtables may do too much 20:11
but if it's a completely deep copy, that's the function to call I think
Infinoid I'm doing a make test now, then I'll retry valgrind 20:12
Whiteknight okay, awesome
Infinoid well spotted btw, Whiteknight++
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()
Infinoid parrotinterpreter.pmc:destroy() is misleadingly useless
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
Infinoid You've just cleaned up 62 megs of leaked memory
Whiteknight !!!
Infinoid (and yes, "make test" still works just fine) 20:15
Whiteknight Infinoid++
Infinoid No, Whiteknight++
Whiteknight everybody++
Infinoid karma everybody
purl everybody has karma of 5
Whiteknight so 200 threads started and joining only leaks 58 bytes? 20:16
Infinoid yes
Whiteknight fantastic
Infinoid there's an IMCC leak where it strdup()s the pir filename and doesn't free it
Whiteknight becauase that means it's not an issue with the threads at all
Infinoid and Parrot_gc_add_pmc_sync() still leaks once, rather than 201 times 20:17
Whiteknight really? wtf?
20:17 AndyA joined
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
I'm going to commit what I have and then do a profiling run (which was my goal all along)
Whiteknight in Parrot_gc_free_pmc_ext, remove the condition PObj_is_PMC_shared_TEST(p) 20:19
that's not necessary and might result in false negatives 20:20
Infinoid I think those would show up in valgrind 20:21
Whiteknight okay, nevermind then
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 :)
well, valgrind shows 2... I'm unaware of any others
Whiteknight ok
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
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
Whiteknight That's why we need a pure-parrot test harness 20:25
Infinoid profiles thread creation and destruction
hmm, true
Whiteknight parrot-test -j9 would kick ass
dalek rrot: r39675 | Infinoid++ | trunk/src (5 files):
Fix 3 thread-related leaks.

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. 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. 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.
Whiteknight awesome 20:26
Infinoid I'd love it if you could sanity check that, it touches several bits of deep core code
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
Is that something new, or just something specific to the test case?
it was run 3200 times 20:29
Whiteknight all tests pass! 20:31
purl Time to write more tests!
Whiteknight purl never said something so true 20:32
purl Whiteknight: sorry...
Whiteknight it's okay purl, I'm sure it will never happen again
Infinoid heh
Whiteknight Infinoid: I think the check for whether we have a Sync should happen in Parrot_gc_add_pmc_sync 20:33
A similar check should happen in Parrot_gc_add_pmc_ext 20:34
the GC needs so much work... 20:35
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
i didn't refresh the file in my editor
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
(not that I have any idea how one loads a dynop)
Whiteknight (or how one frees a dynop) 20:41
dalek rrot: r39676 | whiteknight++ | trunk/src/gc/api.c:
[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
rrot: r39677 | whiteknight++ | trunk/src/gc/api.c:
[gc] the last commit, plus codingstd
Whiteknight I bet that last commit will help simplify some for the clone code 20:44
Infinoid wants a commit bit to the english language grammar. "sillily" needs to be a word 20:46
20:47 dukeleto joined
davidfetter words sillily 20:47
cotto dewords 'words' as a verb 20:48
wait. that didn't do what I wanted it to.
Infinoid wordificates!
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
it went DSCM in the 1770s, approx 20:49
Infinoid wordulates? wordifies, enwordenates
the current grammar definitely has some design bugs
20:50 s1n_yapc joined
Tene Sweet, internet access at home. 20:51
davidfetter good to have :)
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
20:53 kid51 joined
Infinoid For heavy thread loads, that's going to be a huge bottleneck. Fortunately, we don't have any of those loads yet 20:53
dalek rrot: r39678 | whiteknight++ | trunk/src (2 files):
[pmc] now that we're sanely checking for existing pmc_exts in the GC, we can remove some checks elsewhere
20:55
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
dalek rrot: r39679 | whiteknight++ | trunk/src/pmc.c:
[pmc] more cleanups
20:58
rrot: r39680 | cotto++ | trunk/lib/Parrot/Pmc2c/PMCEmitter.pm:
[pmc2c] simplify code to assume that if a PMC has parents, default will be the first (if it's there at all)
20:59 zak_ joined
Whiteknight I'm getting closer and closer to starting a threading_cleanups branch now 21:00
s1n_yapc what's the patch submission process now that parrot is not using rt? 21:02
Whiteknight parrot is on trac now 21:03
trac.parrot.org
same idea, different interface
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
or you can put it directly in the ticket. Use {{{ ... }}} to code format it 21:05
s1n_yapc Whiteknight: what's the preferred method?
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.
Follow {{{ }}} instructions for smaller bits of code.
Coke skims through review. 21:07
s1n_yapc kid51, Whiteknight: thanks
Whiteknight no problem
Coke is pvmw today? 21:09
s1n_yapc Coke: yes
Coke enjoy.
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?
Coke (and a ton of other blockers.)
s1n_yapc: specify it where?
s1n_yapc Coke: in a new ticket
Coke say "trunk" 21:11
kid51 In trak, r12345 translatest to hyperlink to SVN commit 12345
Coke mention the revision # in the body of the ticket.
right. just say r14135 in the ticket.
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
Strike last statement; last statement is way you refer to other Trac tickets
r12345 if for SVN 21:13
When in doubt, preview
dalek TT #779 created by s1n++: [tools] modify fetch_languages.pl to only fetch a specific language
s1n_yapc kid51: the r12345 does in fact make a link
Infinoid When not in doubt, preview anyway :)
s1n_yapc dalek now posts new TT?
dalek rrot: r39681 | whiteknight++ | branches/io_cleanups/src (2 files):
[io_cleanups] add socket to the list of types that can be handled by Parrot_io_close
21:19
rrot: r39682 | cotto++ | branches/pmc_pct/compilers/pmcc/src (2 files):
[pmcc] put all VTABLE functions in vtables{'default'} to allow a logical place for variant vtables
21:22
Infinoid s1n_yapc: Yeah, opens and closes, not comments or updates 21:27
s1n_yapc Infinoid: good to know 21:28
is there a formal process to becoming a cage cleaner?
Infinoid Cleaning cages is a good start :) Nothing formal though
s1n_yapc is a CLA required? 21:29
are the specific people that act as "guides"
Infinoid CLA is required for a committer. People generally start out just pushing patches here using nopaste.snit.ch though
commit access comes later
There is a docs/project/cage_cleaners_guide.pod if you haven't already read that
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
Whiteknight yeah, send in patches, and when we like what you do we throw all sorts of permissions and responsibilies at you 21:34
cotto The biggest qualification for being a cage cleaner is having a patch that you want to get applied. 21:41
also, an Internet connection helps
s1n_yapc cotto: a computer is a prereq for the internet connection though 21:42
cotto touche 21:43
seen allison
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 22:17 cotto joined 22:18 tmoertel joined 22:33 rg1 joined 22:42 ZeroForce joined 23:14 burmas joined 23:20 donaldh joined 23:43 MoC joined