00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:01:18  <MI6>libuv-master-gyp: #125 UNSTABLE windows-x64 (5/193) smartos-ia32 (2/192) smartos-x64 (2/192) windows-ia32 (3/193) http://jenkins.nodejs.org/job/libuv-master-gyp/125/
00:14:01  * ecrquit (Quit: ecr)
00:18:38  <trevnorris>isaacs: I believe there is with natives.
00:18:50  <isaacs>trevnorris: interesting.
00:19:10  <trevnorris>isaacs: also, there's another way, if we assign all the functions to variables within the module using them.
00:19:10  <isaacs>trevnorris: right, because we can native-ify those functions, and then it's like they're pre-inlined, right? or am i completely missing the point there
00:19:25  <isaacs>trevnorris: ohh... interesting
00:19:26  <isaacs>trevnorris: instead of util.isFoo()
00:19:37  <trevnorris>do var isFoo = util.isFoo
00:19:45  <trevnorris>that'll by pass the context change
00:20:00  <trevnorris>a bit of a pain, but it'll work
00:20:51  <tjfontaine>ya I was going to make that suggestion
00:21:18  <tjfontaine>it's the property lookup that's the killer, it has to make sure it hasn't mutated, right?
00:21:39  * st_lukequit (Remote host closed the connection)
00:21:55  <trevnorris>tjfontaine: exactly, and since it lives beyond the module scope it's even worse.
00:22:30  <trevnorris>isaacs: or we can internally expose natives, and assign those out.
00:22:44  <tjfontaine>I guess, I haven't looked into those types of numbers, but the cache seems ideal, but doesn't allow people to do weird things to them like replace them with nops or false if they wanted :P
00:23:01  <trevnorris>basically do an --expose-natives-as=someobj, assign out what we want then to someobj = undefined
00:23:20  <trevnorris>heh
00:23:54  <tjfontaine>I'm really -1 on defaulting with --expose-natives-as, before we result to such things we should really talk with v8 team about what we can do
00:24:02  <tjfontaine>*resort
00:24:06  <Domenic_>Any ObjectWrap experts in the house?
00:24:46  <trevnorris>sure, don't use it. ;)
00:24:59  <tjfontaine>Domenic_: it's easier to ask than to ask to ask :)
00:25:02  <Domenic_>OK, I was thinking of maybe going that route. Because it seems to only work on objects that you create
00:25:10  <Domenic_>Is that correct?
00:25:19  <tjfontaine>that is correct, it needs its own object template
00:25:21  <Domenic_>I always see it wrapping a node-created class, never used to store values on existing objects from users.
00:25:22  <Domenic_>ok
00:25:25  <Domenic_>so no objectwrap for me
00:25:42  <Domenic_>So: how do I do this manually, with Set/GetHiddenValue, but without leaking memory? MakeWeak something something?
00:26:07  <tjfontaine>so you're adding this to arbtrary user input?
00:26:29  <Domenic_>ya. Want to store a ContextifyContext on arbitrary user input.
00:26:31  <tjfontaine>arbitrary objects/values passed to you by the user
00:26:33  <tjfontaine>right
00:26:48  <Domenic_>I mean, it turns out I already do this. But I leak memory.
00:26:58  <tjfontaine>so Get/Set hiddenvalue is the right way, and then yes you need to make them persistent and weak, and then on weakcb you Get it back out and dispose it properly
00:27:16  <tjfontaine>where them is the users value that you tucked the context object on
00:28:19  <Domenic_>OK. I *think* I know how to make them persistent. How does MakeWeak/weakcb work? I guess I'll search for existing examples in the codebase.
00:29:12  <Domenic_>The smalloc example is pretty reasonable, I think I can work with this.
00:29:25  <tjfontaine>right actually you don't even need the Get, because you can pass arbitrary data
00:30:01  <tjfontaine>so pobj.Reset(user_obj); pobj.MakeWeak(some_cb, contextifyPtr);
00:30:25  <tjfontaine>then in some_cb you get the persistent object which you .Dispose(), but you also have the contextifyPtr which you can then `delete contextifyPtr`
00:30:44  * st_lukejoined
00:32:26  <Domenic_>Can I use this method to store arbitrary C++ classes on user_obj, or do I need to make them into JS instances (i.e. Local<Value>s)?
00:33:06  <tjfontaine>if you want to store an arbitrary C++ class (actually a pointer) then you should External::New them, and then SetHiddenValue()
00:33:15  <Domenic_>Ah nice
00:33:46  * julianduquequit (Ping timeout: 256 seconds)
00:33:53  <tjfontaine>user_obj.SetHiddenValue(String::New("super_sekrit"), External::New(new CPPClass()));
00:34:31  <tjfontaine>Domenic_: you want to limit the amount you are ->Get and ->Set'ing of course, so if you have more than 1 of these things to store on an object, you'll want to put them in a container
00:35:07  <Domenic_>tjfontaine: makes sense. GetHiddenValue will give me back a Local<Value>; I can just do .As<CPPClass*>?
00:35:42  <tjfontaine>no, you will get Local<Value> you .As<External>()->Value() which gives you a void* which can then be cast to CPPClass*
00:35:52  <Domenic_>kk thanks
00:36:01  * EhevuTovquit (Quit: This computer has gone to sleep)
00:38:25  * c4milojoined
00:41:29  * paulfryzelquit (Remote host closed the connection)
00:41:38  * AvianFluquit (Remote host closed the connection)
00:44:16  * dominictarrquit (Quit: dominictarr)
00:48:50  * brsonquit (Ping timeout: 264 seconds)
00:49:47  <mordy__>hrrm.. i wonder why this thing isn't throwing proper exceptions.. /home/mnunberg/src/couchnode/lib/couchbase.js:4177: Uncaught Error: [couchnode]: LCB=0;LCB_Expanded='Success';Major=1;Minor=3;Message='Missing callback';
00:50:09  <mordy__>where's my stack trace? and i don't have a line "4177". the exception is created via C++
00:50:37  * brsonjoined
00:51:49  <mordy__>http://paste.scsys.co.uk/266320 (taken from how node.cc does its UVException and ErrnoException)
00:53:07  <tjfontaine>and then you're ThrowException'ing that?
00:54:05  <mordy__>yep
00:54:13  <tjfontaine>is that from an async handler?
00:54:22  * st_lukequit (Remote host closed the connection)
00:55:00  * groundwaterquit (Quit: groundwater)
00:55:42  <mordy__>hrm, i'm not sure where its being thrown from, hence the frustration. i'm using assert.js
00:55:50  <mordy__>brb
01:09:51  * dapquit (Quit: Leaving.)
01:11:00  * TooTallNatequit (Quit: Computer has gone to sleep.)
01:18:39  <Domenic_>tjfontaine: do I need to MarkIndependent() or SetWrapperClassId()?
01:23:36  * TooTallNatejoined
01:29:17  * amartensquit (Quit: Leaving.)
01:37:05  <Domenic_>https://github.com/joyent/node/pull/6117
01:51:40  <mordy__>ok, back
01:56:49  * TooTallNatequit (Quit: Computer has gone to sleep.)
02:00:09  <mordy__>the weird thing about my issue is that process.on('uncaughtException' doesn't seem to recognize it either
02:01:59  * amartensjoined
02:15:37  * kazuponjoined
02:25:52  * jmar777quit (Remote host closed the connection)
02:25:52  * kazuponquit (Remote host closed the connection)
02:35:50  * Brett19joined
02:36:41  <mordy__>ahh
02:36:43  <mordy__>oh hi Brett19
02:37:04  <mordy__>so i just found out about v8::Message::PrintStackTrace
02:37:19  <mordy__>still can't figure out why node isn't printing the stack trace on errors, but this should be good enough
02:41:11  <Brett19>Its not?
02:54:37  * pachetquit (Quit: [ +++ ])
03:18:30  * TooTallNatejoined
03:18:31  * TooTallNatequit (Client Quit)
03:27:19  * bradleymeckjoined
03:29:57  * bradleymeckquit (Client Quit)
03:54:15  * brson_joined
03:54:18  * brsonquit (Ping timeout: 276 seconds)
04:21:36  * brson_quit (Ping timeout: 276 seconds)
04:46:43  * defunctzombiechanged nick to defunctzombie_zz
05:09:26  * defunctzombie_zzchanged nick to defunctzombie
05:24:05  <hueniverse>can someone point me to where I could log slab allocations? I'd like to log whenever a new slab is allocated and when it is cleaned up
05:24:13  <hueniverse>ls
05:34:25  * kazuponjoined
05:38:01  * julianduquejoined
05:38:05  * TooTallNatejoined
05:50:32  * swajrquit (Quit: leaving)
05:53:31  * swajquit (Quit: leaving)
05:53:45  * swajjoined
06:39:15  * TooTallNatequit (Quit: Computer has gone to sleep.)
06:51:48  * stagasjoined
06:54:48  <MI6>nodejs-v0.10-windows: #174 UNSTABLE windows-ia32 (8/597) windows-x64 (7/597) http://jenkins.nodejs.org/job/nodejs-v0.10-windows/174/
07:05:04  * groundwaterjoined
07:07:59  * c4miloquit (Remote host closed the connection)
07:18:51  * groundwaterquit (Quit: groundwater)
07:19:07  * amartensquit (Quit: Leaving.)
07:27:27  * abraxasjoined
07:31:49  * abraxasquit (Ping timeout: 248 seconds)
07:43:04  * julianduquequit (Quit: leaving)
07:49:23  * amartensjoined
07:57:42  * amartensquit (Ping timeout: 264 seconds)
08:00:56  * kazuponquit (Remote host closed the connection)
08:05:19  * kazuponjoined
08:18:40  * kazuponquit (Remote host closed the connection)
08:27:14  * mikealquit (Quit: Leaving.)
08:33:58  * mikealjoined
08:43:12  * txdvquit (Read error: Operation timed out)
08:54:04  * amartensjoined
08:54:14  * defunctzombiechanged nick to defunctzombie_zz
08:59:09  * amartensquit (Ping timeout: 276 seconds)
09:37:21  * AndreasMadsenjoined
09:48:50  * bnoordhuisjoined
09:54:24  * amartensjoined
09:57:15  * kazuponjoined
09:59:02  * amartensquit (Ping timeout: 264 seconds)
10:00:22  * dominictarrjoined
10:13:10  * kazuponquit (Remote host closed the connection)
10:13:15  * dominictarr_joined
10:16:23  * dominictarrquit (Ping timeout: 245 seconds)
10:16:23  * dominictarr_changed nick to dominictarr
10:45:16  <MI6>nodejs-v0.10: #1446 UNSTABLE smartos-x64 (2/597) osx-x64 (1/597) http://jenkins.nodejs.org/job/nodejs-v0.10/1446/
10:54:44  * amartensjoined
10:59:02  * amartensquit (Ping timeout: 240 seconds)
11:35:00  * AndreasMadsenquit (Remote host closed the connection)
11:44:29  * AndreasMadsenjoined
11:46:48  * stagasquit (Ping timeout: 245 seconds)
11:49:42  * piscisaureus_joined
11:55:05  * amartensjoined
11:59:30  * amartensquit (Ping timeout: 264 seconds)
12:00:33  * piscisaureus_quit (Ping timeout: 245 seconds)
12:05:46  * piscisaureus_joined
12:47:58  <bnoordhuis>http://www.oldskool.org/pc/8088_Corruption/8088Corruption_vcf.pdf <- this is pretty rad, 30 fps video + 22 khz sound on an original XT
12:48:49  <bnoordhuis>i did get some video going back in the day in 640x400x2 mode but nothing like that (no sound either)
12:51:34  <bnoordhuis>sorry, typo - it's 640x200x2
12:55:24  * amartensjoined
13:00:06  * amartensquit (Ping timeout: 264 seconds)
13:00:23  * kazuponjoined
13:02:28  * kazuponquit (Read error: Connection reset by peer)
13:03:04  * kazuponjoined
13:07:47  * AndreasMadsenquit (Remote host closed the connection)
13:10:38  * AndreasMadsenjoined
13:10:52  * AvianFlujoined
13:17:38  * kazuponquit (Remote host closed the connection)
13:19:58  * hzjoined
13:25:50  * roxluquit (Ping timeout: 240 seconds)
13:38:05  * kazuponjoined
13:38:26  <MI6>joyent/libuv: Ben Noordhuis master * 17452cd : linux: fix setsockopt(SO_REUSEPORT) error handling - http://git.io/n3M2_g
13:39:26  * kazuponquit (Read error: Connection reset by peer)
13:39:55  * kazuponjoined
13:44:09  <MI6>libuv-master: #186 UNSTABLE smartos (9/192) windows (4/193) http://jenkins.nodejs.org/job/libuv-master/186/
13:44:44  <MI6>libuv-master-gyp: #126 UNSTABLE windows-x64 (3/193) smartos-ia32 (2/192) smartos-x64 (2/192) windows-ia32 (3/193) http://jenkins.nodejs.org/job/libuv-master-gyp/126/
13:46:27  * kazuponquit (Ping timeout: 276 seconds)
13:55:42  * amartensjoined
13:57:03  * kazuponjoined
13:57:07  <piscisaureus_>bnoordhuis: hey
13:57:09  <piscisaureus_>bnoordhuis: https://github.com/joyent/libuv/blob/master/src/fs-poll.c#L153
13:57:19  <bnoordhuis>piscisaureus_: ho
13:57:27  <piscisaureus_>bnoordhuis: that has quite bad consequences when busy_polling is false and fs_stat fails for some reason
13:57:29  <piscisaureus_>(e.g. no access)
13:57:47  <piscisaureus_>because the poll_cb could be uninitialized and then libuv goes boom
13:57:55  <MI6>libuv-node-integration: #172 UNSTABLE smartos-ia32 (2/636) smartos-x64 (8/636) http://jenkins.nodejs.org/job/libuv-node-integration/172/
13:58:11  <bnoordhuis>piscisaureus_: i take pull requests. please include regression tests
13:58:34  <piscisaureus_>bnoordhuis: I was hoping that you'd say "oh, that's okay, because x y z"
14:00:05  * amartensquit (Ping timeout: 248 seconds)
14:00:50  <bnoordhuis>piscisaureus_: oh, it quite possibly might be. my memory is a little fuzzy on its inner workings
14:00:50  <bnoordhuis>probably a good indicator that some refactoring might be in order
14:01:23  <piscisaureus_>bnoordhuis: I'm doing the ctime change but after that I have other things on my bucket list
14:01:27  <piscisaureus_>so, later :)
14:02:58  * kazuponquit (Ping timeout: 255 seconds)
14:23:14  * kazuponjoined
14:32:31  * kazuponquit (Ping timeout: 245 seconds)
14:32:39  <MI6>joyent/libuv: Bert Belder reviewme * 7ba9f4e : windows: reimplement uv_fs_stat using NT syscalls (+7 more commits) - http://git.io/DyGNPQ
14:34:30  * kazuponjoined
14:36:58  * kazuponquit (Read error: Connection reset by peer)
14:37:29  * kazuponjoined
14:38:33  <MI6>libuv-review: #46 UNSTABLE smartos-ia32 (4/192) linux-ia32 (7/192) windows-ia32 (3/193) windows-x64 (3/193) smartos-x64 (2/192) osx-x64 (5/193) http://jenkins.nodejs.org/job/libuv-review/46/
14:41:15  <piscisaureus_>bnoordhuis: you reviewed *all* patches already?
14:44:46  <MI6>joyent/libuv: Bert Belder v0.10 * 851a662 : windows: make uv_fs_chmod() report errors correctly - http://git.io/-yeDTA
14:49:41  <MI6>libuv-v0.10: #110 UNSTABLE smartos (2/187) windows (5/188) http://jenkins.nodejs.org/job/libuv-v0.10/110/
14:50:30  <MI6>libuv-v0.10-gyp: #74 UNSTABLE windows-x64 (5/188) windows-ia32 (3/188) smartos-x64 (2/187) smartos-ia32 (2/187) http://jenkins.nodejs.org/job/libuv-v0.10-gyp/74/
14:53:07  <MI6>joyent/libuv: Bert Belder master * d667653 : windows: report uv_process_t exit code correctly (+1 more commits) - http://git.io/f1V1lA
14:53:46  <MI6>joyent/libuv: piscisaureus created branch ctime-windows - http://git.io/IB_jNA
14:54:31  <MI6>joyent/libuv: Bert Belder master * 7f75695 : windows: make uv_fs_chmod() report errors correctly - http://git.io/43mbFw
14:56:02  * amartensjoined
14:57:55  * bnoordhuisquit (Ping timeout: 246 seconds)
14:59:35  <MI6>libuv-master: #187 UNSTABLE smartos (11/192) windows (4/193) http://jenkins.nodejs.org/job/libuv-master/187/
15:00:14  * amartensquit (Ping timeout: 240 seconds)
15:00:41  * rendarjoined
15:01:10  <MI6>libuv-node-integration: #173 UNSTABLE linux-ia32 (1/597) smartos-x64 (2/597) http://jenkins.nodejs.org/job/libuv-node-integration/173/
15:02:25  <MI6>libuv-review: #48 UNSTABLE smartos-ia32 (2/192) windows-ia32 (4/193) osx-ia32 (2/193) windows-x64 (3/193) smartos-x64 (5/192) linux-x64 (2/192) http://jenkins.nodejs.org/job/libuv-review/48/
15:06:19  <MI6>libuv-master-gyp: #127 UNSTABLE linux-ia32 (1/192) windows-x64 (3/193) smartos-ia32 (2/192) smartos-x64 (2/192) windows-ia32 (3/193) osx-ia32 (1/193) http://jenkins.nodejs.org/job/libuv-master-gyp/127/
15:08:11  <MI6>libuv-master: #188 UNSTABLE smartos (9/192) windows (3/193) http://jenkins.nodejs.org/job/libuv-master/188/
15:10:02  * kazuponquit (Read error: Connection reset by peer)
15:10:21  * kazuponjoined
15:12:42  * piscisaureus_quit (Ping timeout: 264 seconds)
15:18:25  <MI6>libuv-master-gyp: #128 UNSTABLE linux-ia32 (2/192) windows-x64 (3/193) smartos-ia32 (6/192) smartos-x64 (2/192) windows-ia32 (4/193) osx-x64 (1/193) http://jenkins.nodejs.org/job/libuv-master-gyp/128/
15:20:29  <MI6>libuv-node-integration: #174 UNSTABLE smartos-ia32 (64/636) osx-ia32 (15/636) osx-x64 (1/636) smartos-x64 (8/636) http://jenkins.nodejs.org/job/libuv-node-integration/174/
15:20:43  <MI6>nodejs-master: #475 UNSTABLE smartos-x64 (78/636) smartos-ia32 (2/636) osx-x64 (28/636) osx-ia32 (1/636) http://jenkins.nodejs.org/job/nodejs-master/475/
15:23:55  * bnoordhuisjoined
15:32:21  * bnoordhuisquit (Ping timeout: 248 seconds)
15:34:15  <MI6>libuv-node-integration: #175 UNSTABLE smartos-ia32 (2/636) smartos-x64 (9/636) http://jenkins.nodejs.org/job/libuv-node-integration/175/
15:34:30  * bnoordhuisjoined
15:39:49  * bnoordhuisquit (Ping timeout: 248 seconds)
15:45:38  <MI6>nodejs-master: #476 UNSTABLE smartos-x64 (10/636) smartos-ia32 (4/636) http://jenkins.nodejs.org/job/nodejs-master/476/
15:47:42  * bnoordhuisjoined
15:52:45  <creationix>does anyone know why uv_get_process_title would not work on linux?
15:53:08  <creationix>Tried on both 0.10.15 and 0.10.13
15:53:16  <creationix>the latest node which claims to have 0.10.14 works fine
15:53:33  <creationix>in node I get back "node", but in luv I get back ""
15:54:48  <creationix>also tested in 0.10.14. Still not working
15:55:20  <creationix>bnoordhuis: ^
15:56:20  <creationix>it's a pretty simple API, so I think I'm calling it right:
15:56:22  <creationix>uv_err_t err = uv_get_process_title(title, sizeof(title));
15:56:24  * amartensjoined
16:00:50  * amartensquit (Read error: Operation timed out)
16:05:19  <creationix>ahh yes, I need to setup argv
16:05:20  <creationix> argv = uv_setup_args(argc, argv);
16:07:25  <creationix>that could be a problem, I don't have argv in my addon
16:30:05  <bnoordhuis>i see you've found the issue :)
16:36:48  * Damn3dquit (Read error: Connection reset by peer)
16:50:38  * kazuponquit (Ping timeout: 240 seconds)
16:53:06  * AndreasMadsenquit (Remote host closed the connection)
16:54:54  * AndreasMadsenjoined
16:56:43  * amartensjoined
16:59:44  * Damn3djoined
16:59:56  <tjfontaine>bnoordhuis: and the inline fix has landed, congrats :)
17:01:23  * amartensquit (Ping timeout: 260 seconds)
17:02:29  * TooTallNatejoined
17:02:55  * TooTallNatequit (Client Quit)
17:08:29  <bnoordhuis>oh indeed. that was fast
17:12:37  * piscisaureus_joined
17:14:06  <MI6>joyent/libuv: Bert Belder master * 20a8e58 : windows: reimplement uv_fs_stat using NT syscalls (+4 more commits) - http://git.io/SIXXOQ
17:20:20  <MI6>libuv-master: #189 UNSTABLE smartos (9/192) windows (3/193) http://jenkins.nodejs.org/job/libuv-master/189/
17:20:24  <MI6>libuv-master-gyp: #129 UNSTABLE windows-x64 (3/193) smartos-ia32 (2/192) smartos-x64 (2/192) windows-ia32 (4/193) http://jenkins.nodejs.org/job/libuv-master-gyp/129/
17:20:25  * Benviequit
17:22:55  <piscisaureus_>isaacs: bnoordhuis: if we upgrade libuv in node, we'll have to rethink 'dev' and 'ino' in the stats object
17:23:08  <piscisaureus_>since these can be huge numbers on windows
17:23:26  <tjfontaine>strings! :P
17:23:56  <piscisaureus_>tjfontaine: can you write me a 64-version of ntod:
17:24:17  <tjfontaine>heh
17:24:45  <piscisaureus_>er, itoa of course
17:24:58  <piscisaureus_>actually, let's just use snprintf :)
17:24:58  <tjfontaine>I knew what you were aiming at
17:25:00  <tjfontaine>yse
17:25:08  <tjfontaine>that was going to be my suggestion
17:25:15  <tjfontaine>anyway
17:26:20  <tjfontaine>we could make them strings, and people could coerce and get something relatively sane, but the important thing people use dev and ino for are hash keys, right?
17:26:39  * mikealquit (Quit: Leaving.)
17:27:28  <piscisaureus_>yeah
17:27:36  <piscisaureus_>and to tell whether two symlinks point at the same file
17:27:41  <tjfontaine>right
17:27:54  <piscisaureus_>so it shouldn't matter much, the values are opache
17:28:00  <piscisaureus_>*opaque
17:28:20  <tjfontaine>we could also make them "arrays"
17:28:37  <piscisaureus_>tjfontaine: although on windows st_dev is actually the volume serial number which is presented as two 16-bit words in hex
17:28:38  <tjfontaine>not dissimilar to how we handle hrtime
17:28:43  <piscisaureus_>like 5FA3-B00!
17:28:48  <tjfontaine>ugh.
17:29:14  <piscisaureus_>but, I guess, as long as they are opaque it should work
17:32:52  * AndreasMadsenquit (Remote host closed the connection)
17:42:19  * AndreasMadsenjoined
17:44:35  <MI6>libuv-node-integration: #176 UNSTABLE smartos-ia32 (2/636) linux-x64 (1/636) smartos-x64 (10/636) http://jenkins.nodejs.org/job/libuv-node-integration/176/
17:46:27  <MI6>joyent/libuv: piscisaureus created tag v0.11.10 - http://git.io/gASSKg
17:46:33  <MI6>joyent/libuv: Bert Belder master * c860767 : Now working on v0.11.11 (+2 more commits) - http://git.io/rxkwtA
17:51:00  <MI6>joyent/node: Bert Belder master * 8333859 : uv: upgrade to v0.11.10 - http://git.io/LOtpxw
17:57:13  <MI6>libuv-master-gyp: #130 UNSTABLE windows-x64 (3/193) smartos-ia32 (2/192) smartos-x64 (4/192) windows-ia32 (3/193) http://jenkins.nodejs.org/job/libuv-master-gyp/130/
17:59:16  <MI6>libuv-review: #49 UNSTABLE smartos-ia32 (2/192) windows-ia32 (6/193) windows-x64 (4/193) smartos-x64 (2/192) osx-x64 (1/193) http://jenkins.nodejs.org/job/libuv-review/49/
17:59:26  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
18:00:21  <MI6>nodejs-master: #477 UNSTABLE smartos-x64 (9/636) smartos-ia32 (3/636) osx-ia32 (1/636) http://jenkins.nodejs.org/job/nodejs-master/477/
18:01:11  <MI6>libuv-master: #190 UNSTABLE smartos (9/192) windows (3/193) linux (2/192) http://jenkins.nodejs.org/job/libuv-master/190/
18:03:15  * AndreasMadsenquit (Remote host closed the connection)
18:07:31  * TooTallNatejoined
18:13:00  * AndreasMadsenjoined
18:13:05  * AndreasMadsenquit (Remote host closed the connection)
18:16:39  * TooTallNatequit (Quit: ["Textual IRC Client: www.textualapp.com"])
18:27:40  <MI6>libuv-node-integration: #177 UNSTABLE smartos-ia32 (2/636) smartos-x64 (9/636) http://jenkins.nodejs.org/job/libuv-node-integration/177/
18:28:04  <MI6>nodejs-master-windows: #268 UNSTABLE windows-x64 (19/636) windows-ia32 (19/636) http://jenkins.nodejs.org/job/nodejs-master-windows/268/
18:29:12  * bnoordhuisquit (Ping timeout: 276 seconds)
18:29:58  <MI6>libuv-master: #191 UNSTABLE smartos (9/192) windows (3/193) linux (1/192) http://jenkins.nodejs.org/job/libuv-master/191/
18:53:09  * mikealjoined
18:53:30  * mikealquit (Client Quit)
18:57:07  * amartensjoined
18:59:08  <MI6>libuv-node-integration: #178 UNSTABLE smartos-ia32 (2/636) linux-ia32 (1/636) smartos-x64 (8/636) http://jenkins.nodejs.org/job/libuv-node-integration/178/
18:59:51  <tjfontaine>Domenic_: the rest of that logic shouldn't be applied to every sandbox+context created?
19:00:27  <Domenic_>tjfontaine: it is applied to every context created; the only way JS can create contexts is through .makeContext(sandbox)
19:00:30  <tjfontaine>I guess it's just a matter of responsibility, but it could all be in the constructor
19:01:31  <tjfontaine>Domenic_: what happens if I try and share the same sandbox between contexts?
19:01:37  * amartensquit (Ping timeout: 256 seconds)
19:01:44  <Domenic_>What would the code look like inside MakeContext if I moved that into the constructor?
19:01:48  <Domenic_>tjfontaine: great question! Hrm.
19:02:05  <Domenic_>tjfontaine: that's exactly what ben's example is doing, i bet that's why it fails.
19:02:16  <tjfontaine>right
19:02:18  <Domenic_>I think it should throw an error
19:02:45  <tjfontaine>a ->Has check should suffice
19:02:45  <Domenic_>although in that case we should probably expose some kind of vm.uncontextify(sandbox) if you *do* want to share.
19:02:51  <MI6>nodejs-master-windows: #269 UNSTABLE windows-x64 (18/636) windows-ia32 (19/636) http://jenkins.nodejs.org/job/nodejs-master-windows/269/
19:02:52  <Domenic_>s/share/reuse
19:03:01  <tjfontaine>right I'm not sure if it makes sense int he model to share
19:03:37  <Domenic_>i guess people might be "sharing" with current vm code
19:03:42  <Domenic_>since it just copies and stuff.
19:03:54  <tjfontaine>anyway the makeContext code would basically just look like: new ContextifyContext(sandbox)
19:04:13  <Domenic_>`new` for side effects, bleh :(
19:04:23  <tjfontaine>indeed, I agree it's a question of responsibility
19:05:18  <tjfontaine>I'm not particularly fussed about it
19:05:35  <Domenic_>ok
19:05:37  * dominictarr_joined
19:05:43  <tjfontaine>I do wonder about this sandbox reuse case though
19:06:33  <Domenic_>yeah if I don't share contexts and do --expose-gc it seems to be working fine, no GC times > 150 ms
19:07:11  <Domenic_>Can we think of a reasonable way to make sharing work? They'd have to reference count I guess
19:07:39  <Domenic_>Or, wait
19:07:44  <tjfontaine>well, I think it's harder because of how we're currently stashing the context on the object
19:08:03  <Domenic_>(No, nevermind, don't wait, that idea was silly.)
19:08:04  <Domenic_>Hmm.
19:08:23  <Domenic_>I wish we had WeakMap...
19:08:51  <tjfontaine>I'm trying to decide if a sandbox shared among multiple contexts actually makes sense, or if it should be an error
19:08:51  * dominictarrquit (Ping timeout: 276 seconds)
19:08:52  * dominictarr_changed nick to dominictarr
19:09:40  <tjfontaine>before this was an explicit pattern, run(context, sandbox) right? and now we're trying to do .run(sandbox)?
19:10:20  <Domenic_>No, the API is the same
19:10:43  <Domenic_>It was always `var context = vm.createContext(sandbox); vm.runInContext(context, 'code')`
19:10:55  <Domenic_>I think before `context !== sandbox`
19:11:02  <Domenic_>but now they are equal (in JavaScript land)
19:11:19  * indexzerojoined
19:11:58  <tjfontaine>right
19:12:46  <Domenic_>can I just bail whenever there's already a context on the sandbox?
19:12:51  <tjfontaine>I think so
19:12:52  <Domenic_>Wait yes that works, doesn't it.
19:13:02  <Domenic_>sweet
19:13:08  <tjfontaine>I think you want to actually have a js function for this as well
19:13:25  <Domenic_>?
19:13:35  <tjfontaine>it should throw if you do this, but you should protect against it, and let users find out if this object was already associated with a context
19:13:49  <tjfontaine>vm.hasContext, or vm.isSandbox
19:14:24  <Domenic_>Such a function seems OK. But what about just having vm.createContext() be the identity function (with no side effects) if it's already a context
19:15:12  <tjfontaine>maybe, it's a bit odd from a function named create though
19:15:28  <Domenic_>well, that's been a misnomer ever since this refactor
19:15:38  <Domenic_>s/refactor/rewrite
19:15:57  <Domenic_>it always returns its input these days
19:16:10  <Domenic_>(i should update the docs)
19:16:23  <tjfontaine>right, the docs need to be very ultra clear about what is happening here
19:16:49  <Domenic_>It's weird, vm.createContext() and vm.createContext(sandbox) are extremely different.
19:17:08  <tjfontaine>createContext() isn't equivalent to createContext({})?
19:17:13  <Domenic_>Well, it is
19:17:54  <Domenic_>But createContext() feels like it's actually creating. createContext({}) modifies the input {} to be contextified
19:17:56  * hzquit (Ping timeout: 245 seconds)
19:18:07  <tjfontaine>right
19:19:03  <Domenic_>so we should definitely expose a vm.isContext(sandbox). I don't really have opinions on whether createContext should throw or be the identity function when that's true.
19:20:22  <tjfontaine>well, my preference would be ASSERT(!sandbox->Has('contextifyHidden')); in cpp, and then in JS do if(vm.isContext(sandbox)) return sandbox;
19:21:06  <tjfontaine>or throw in js if that's what people want
19:21:17  <Domenic_>right, yeah, whichever is done, do it in JS.
19:21:23  <tjfontaine>the cpp portion of this should never let this through though
19:22:12  <Domenic_>PR ettiquete question: should I do these changes as a separate PR, or just keep trucking on this memory-leak-fixing one?
19:22:24  * groundwaterjoined
19:22:56  <tjfontaine>meh, I would just add them as new commits to this one, and then update the name of the issue
19:23:04  <Domenic_>sounds good
19:23:20  <Domenic_>Also, when would you *not* use MarkIndepent()?
19:23:20  <tjfontaine>if you can't update it, lemme know what a good title would be and I'll do it
19:23:46  * mikealjoined
19:24:14  <tjfontaine>Domenic_: when you wanted to make sure weakcb was happening during an actual marksweep phase, instead of scavenge
19:24:59  <Domenic_>tjfontaine: hmm. I barely grasp what that means. But it sounds like MarkIndependent() would be good here?
19:25:15  <tjfontaine>ya, use independent :)
19:27:37  <tjfontaine>ironically some of the best written analysis of the v8 gc, https://bugzilla.mozilla.org/show_bug.cgi?id=634503 :P
19:27:56  <Domenic_>nice :D
19:28:13  <tjfontaine>it's still mostly accurate as far as I can tell
19:28:52  * Damn3dquit (Ping timeout: 257 seconds)
19:35:47  * Damn3djoined
19:45:59  <Domenic_>tjfontaine: I don't think ->Has works, or more likely I'm doing something wrong. It always returns false. https://github.com/domenic/node/commit/a810c307d85b3a4aaab4c9e32d892a69d3dc80d3#L1R147
19:47:27  <tjfontaine>Domenic_: shame, then you'll need to GetHiddenValue and then check against IsEmpty I guess
19:48:05  * indexzeroquit (Quit: indexzero)
19:48:10  <Domenic_>ok sounds good. It did seem weird to me, since how would you distinguish between a normal property named _contextifyHidden and a hidden value?
19:48:38  <tjfontaine>right, I was making an assumption, it's sad that there's no HasHiddenValue
19:48:58  <Domenic_>next pull-request target: v8!
19:49:11  <tjfontaine>heh
19:50:00  <tjfontaine>hm, isempty is persistent thing
19:50:16  <tjfontaine>but undefined probably works
19:54:40  <mordy__>bah.. i have got to get me one of those new fangled operating systems with fancy memory debugging
19:54:57  <mordy__>whatever bug i just ran into, it made gdb unable to figure out the stack trace
19:55:04  <mordy__>and valgrind remained silent
19:55:37  <tjfontaine>heh
19:56:50  <mordy__>is there any reason i'd want to use MakeCallback instead of ->Call?
19:57:19  <mordy__>i do see a line in node.cc that does something like:
19:57:20  * amartensjoined
19:57:42  <mordy__>foo->Get(String::New("some literal")) and several ML posts complaining about this
19:58:21  * Damn3dquit (Quit: cu)
20:00:37  * kenperkinsquit (Quit: Computer has gone to sleep.)
20:01:42  * kenperkinsjoined
20:02:09  * amartensquit (Ping timeout: 276 seconds)
20:02:14  * kenperkinsquit (Client Quit)
20:02:27  <Domenic_>IsEmpty worked great, it's a Handle thing it seems.
20:03:12  <Domenic_>mordy__: I believe MakeCallback is very important; it handles all the event-loop machinery particular to node's stuff, like domains and nextTick/setImmediate and so on.
20:05:43  <mordy__>i really wish v8 had a better naming convention for "Quick" and "Slow" functions
20:06:15  <mordy__>so i don't have to scan the header to find out that bool IsEmpty() const { return val_ == NULL; }
20:10:23  * TooTallNatejoined
20:30:45  <Domenic_>fileName or filename for JS-exposed APIs?
20:31:10  <Domenic_>looks like filename
20:50:52  * TooTallNatequit (Quit: ["Textual IRC Client: www.textualapp.com"])
20:51:58  * amartensjoined
20:55:46  * pachetjoined
20:56:38  * dominictarrquit (Ping timeout: 240 seconds)
20:57:51  <othiym23>is there a reason why NativeModule.require and NativeModule.exists triggers deoptimization?
21:15:16  * rendarquit (Ping timeout: 260 seconds)
21:16:20  * TooTallNatejoined
21:22:02  * defunctzombie_zzchanged nick to defunctzombie
21:26:33  * c4milojoined
21:29:39  * abraxasjoined
21:33:57  * abraxasquit (Ping timeout: 248 seconds)
21:34:15  * brsonjoined
21:43:57  * bnoordhuisjoined
21:46:13  <Domenic_>Anyone know how to turn a Local<String> into something I can see in the debugger?
21:47:14  <TooTallNate>Domenic_: you mean a c string?
21:47:22  <Domenic_>TooTallNate: ya
21:47:45  <TooTallNate>probably Utf8Value()
21:47:46  <TooTallNate>http://marcorogers.com/blog/static/v8/doxygen/classv8_1_1String_1_1Utf8Value.html
21:47:49  <tjfontaine>String::Utf8Value s(value);
21:48:12  <tjfontaine>*s, is roughly equivalent to .c_str()
21:49:01  <mordy__>btw, does Utf8Value do anything other than a scoped allocated chunk that's written to by WriteUtf8?
21:49:38  <mordy__>does it use v8's heap? is it more efficient to use v8's heap rather than new char[]?
21:49:55  <tjfontaine>they can be on the v8 heap, or external to it
21:50:05  <tjfontaine>see also String::NewExternal or whatever
21:52:29  <mordy__>hrm; looking
21:53:03  <mordy__>there's quite a few possibilities here actually
21:53:35  <othiym23>it seems legit to ask why the V8 docs are hosted on Marco's blog
21:54:09  <tjfontaine>do not confuse doxygen with docs for v8 :P
21:54:20  <mordy__>is there such a thing?
21:54:23  <tjfontaine>izs.me is often first hit for his doxygen things
21:54:31  <tjfontaine>mordy__: docs for v8? surely you jest.
21:54:44  <mordy__>there's the "Embedder's Guide", but that's about it
21:54:46  <mordy__>yeah :/
21:55:26  <othiym23>trying to figure out what "gap." means in the deoptimizer output is easy
21:55:41  <othiym23>you just have to read all of the lithium source for the architecture your Node was compiled for!
21:55:55  <mordy__>what is lithium anyway?
21:55:58  <mordy__>asm?
21:56:06  <tjfontaine>othiym23: ask mraleph :P
21:56:22  * kenperkinsjoined
21:57:26  <othiym23>mordy__: lithium is the low-level intermediate representation that crankshaft uses to generate machine code
21:57:42  <othiym23>it's where the low-level optimization / deoptimization happens
21:57:42  <mordy__>so this "ExternalStringResource" thing is interesting.. smells a bit like the Python's buffer API
21:57:53  <mordy__>ahh.. so that's the "JIT" basically?
21:57:59  <mordy__>or no
21:58:03  <mordy__>i guess that happens before the JIT
21:58:12  <othiym23>(and hydrogen is the high-level IR -- Hydrogen : High-level :: Lithium : Low-level)
21:58:21  <othiym23>it's part of the JIT
21:58:30  <mordy__>ahh
21:58:44  <othiym23>Hydrogen and Lithium produce JITted output that gets fed into Crankshaft to produce optimized machine code
21:59:04  <mordy__>so basically javascript gets broken down into this IR (which would be cross platform) then pushed through lithium which then selects an architecture-specific machine code output
21:59:16  <othiym23>tjfontaine: do you have any tips for writing tests that allow you to see whether code you've written is likely to lead to deopts in practice?
21:59:43  <othiym23>I think my current test cases don't run my functions enough to give the optimizer an opportunity to fire
22:00:24  <othiym23>mordy__: sorta; Hydrogen is platform-neutral (I think), but Lithium is tied to the target architecture, for certain kinds of memory and code optimizations
22:00:34  <mordy__>it's scary just how much engineering goes in to make javascript less painfully slow
22:00:47  <othiym23>dynamism comes at a price
22:01:11  <othiym23>at least it can be done with JS; good luck getting most of V8's optimizations to work with something like Ruby
22:01:11  <tjfontaine>othiym23: I generally watch for that in the context of a benchmark, not necessarily a test, and then just trace the deopts, more often than not it's monomorphic problems
22:01:35  <othiym23>tjfontaine: kk
22:01:51  <othiym23>do you have any tips for directly measuring the impact of closure creation?
22:01:55  <othiym23>or is it just benchmarking again?
22:02:14  <othiym23>trying to figure out analytically just how shitty my monkeypatching is for people's apps
22:02:22  <mordy__>othiym23: there's actually a project going around for a perl5 jit
22:02:27  <tjfontaine>I don't have an extra tips, that's pretty much how I have done it
22:02:30  <tjfontaine>*any
22:02:39  <othiym23>tyvm, that's good to know either way
22:03:06  <othiym23>time to fly to Denmark with a big net and a book of 19th century Russian poetry, then
22:03:28  <mordy__>it would be interesting to know how V8's C API can interact with the JIT
22:03:28  <tjfontaine>also, I'm going to be building (and storing the results) of every commit since the v0.10 branch, and let others use them as the basis for their own tests, even as I use them for my benchmarks that I need to run
22:03:41  <tjfontaine>windows will be special of course
22:03:54  <othiym23>mordy__: Perl's actually easier to JIT than Ruby, because most of the dynamism is forced through the typeglob
22:04:21  <tjfontaine>but, I'm going to do a `configure && make install && tar cjf && mput` of every commit, for ia32/x64, and every platform I have in jenkins already
22:04:31  <othiym23>I mean, it's hairy dealing with all of the weird edge cases around scalar vs list vs object contexts, but I think most of that cost is already eaten by the Perl parser; once you have the AST it's not so bad
22:05:03  <othiym23>tjfontaine: can you mount manta as a FUSE filesystem?
22:05:09  <othiym23>is there a FUSE implementation for Windows?
22:05:19  <tjfontaine>othiym23: not currently, but FUSE would be trivial given its primitives
22:05:20  <othiym23>then it'd just be a snap to get Windows stuff on there
22:05:29  <othiym23>a "snap"
22:05:30  <tjfontaine>othiym23: and there are fuse implementations for win
22:05:40  <tjfontaine>the hard part isn't manta+win
22:05:55  <tjfontaine>the "hard" part is the difference/missing make install
22:06:41  <mordy__>a cool thing that perl has done for quite a while is GV caching
22:06:59  <mordy__>(like you mentioned before about the typeglob)
22:07:11  <mordy__>so $foo->obj will only do a hash lookup once
22:07:41  <mordy__>and it's immune to monkey patching as monkey patching modifies underlying CV within the GV; not the GV itself
22:09:09  * kenperkinsquit (Quit: Computer has gone to sleep.)
22:36:21  * groundwaterquit (Quit: groundwater)
22:46:58  * kenperkinsjoined
22:53:50  * c4miloquit (Remote host closed the connection)
22:53:51  * kenperkinsquit (Quit: Computer has gone to sleep.)
22:54:23  <Domenic_>isaacs: FYI I just finished the code to convert vm to options arguments, will push as soon as I update the docs. No need to work on that yourself :)
23:00:00  * c4milojoined
23:12:12  * c4miloquit (Remote host closed the connection)
23:16:21  * AvianFluquit (Ping timeout: 248 seconds)
23:16:35  * AvianFlujoined
23:18:35  * AvianFluquit (Remote host closed the connection)
23:25:33  * jmar777joined
23:36:29  * groundwaterjoined
23:37:09  * amartensquit (Quit: Leaving.)
23:37:44  * TooTallNatequit (Quit: Computer has gone to sleep.)
23:41:47  * amartensjoined
23:48:12  <mordy__>hrm.. apparently node barfs when i try to pass it a External::Wrap object
23:48:23  <mordy__>or so it seems
23:48:38  <tjfontaine>you probably shouldn't be using ::Wrap, it's gone in later versions of v8
23:49:46  <tjfontaine>::New and ->Value are basically what you want
23:50:25  * jmar777quit (Remote host closed the connection)
23:50:53  <mordy__>they croak there too :/
23:51:28  <tjfontaine>croak in what capacity
23:51:52  <MI6>joyent/libuv: Ben Noordhuis master * d6464c8 : build: remove _GNU_SOURCE macro definition (+2 more commits) - http://git.io/BKpn9Q
23:52:12  <tjfontaine>erm, I made jenkins kinda unhappy
23:52:47  * brsonquit (Quit: leaving)
23:52:55  <tjfontaine>by scheduling 530 jobs
23:53:10  <mordy__>http://paste.scsys.co.uk/266469
23:55:24  <tjfontaine>mordy__: can you `gdb $(which node) ./core` and then `bt full`
23:55:42  <mordy__>hrm, let's see
23:57:07  <mordy__>http://paste.scsys.co.uk/266470
23:58:06  <tjfontaine>well that's not all that helpful
23:58:11  <mordy__>yeah :/
23:58:24  <mordy__>i guess i want to print out the actual Handle's ->_val field?
23:58:27  <mordy__>or is it val_
23:58:33  <mordy__>and then we might find it in the dump
23:59:09  <mordy__>i wonder if something nasty like printf("%p\n", *char(handle)) would work
23:59:25  <mordy__>nah
23:59:27  <mordy__>i'd need to do
23:59:41  <mordy__>*(char**)&handle
23:59:48  <mordy__>hrm, that might work actually