00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:00:18  * loladiroquit (Read error: Operation timed out)
00:00:19  * loladiro_changed nick to loladiro
00:01:28  * bentkusjoined
00:04:16  * qmx|awaychanged nick to qmx
00:18:42  * lohkeyjoined
00:20:32  * stagasquit (Ping timeout: 256 seconds)
00:21:41  * stagasjoined
00:29:54  * dapquit (Quit: Leaving.)
00:30:19  * dapjoined
00:30:42  * stagas_joined
00:32:19  * stagasquit (Ping timeout: 246 seconds)
00:32:22  * stagas_changed nick to stagas
00:38:45  * stagas_joined
00:40:29  * stagasquit (Ping timeout: 260 seconds)
00:40:41  * stagas_changed nick to stagas
00:58:00  * paddybyers_quit (Ping timeout: 256 seconds)
00:58:29  * loladiroquit (Quit: loladiro)
00:59:03  * brsonquit (Ping timeout: 260 seconds)
01:01:00  * c4milojoined
01:03:58  * bradleymeckjoined
01:05:07  * c4miloquit (Ping timeout: 248 seconds)
01:09:48  * stagas_joined
01:12:20  * stagasquit (Ping timeout: 248 seconds)
01:12:28  * stagas_changed nick to stagas
01:16:59  * stagasquit (Ping timeout: 252 seconds)
01:32:08  <isaacs>ugh.
01:32:32  <isaacs>the only thing more tedious than micro-performance "improvements" without benchmarks are micro-performance improvements with horribly invalid benchmarks.
01:34:16  * bradleymeckquit (Ping timeout: 256 seconds)
01:34:18  * bradleymeck_joined
01:34:21  * jmar777quit (Remote host closed the connection)
01:36:10  * brsonjoined
01:37:20  * abraxas__joined
01:39:49  * jmar777joined
01:40:11  * dapquit (Quit: Leaving.)
01:43:24  <mmalecki>interesting...
01:43:33  <mmalecki>indutny: you still here?
02:10:17  * pooyaquit (Quit: pooya)
02:26:28  * pooyajoined
02:28:29  * joshthecoderquit (Quit: Leaving...)
02:37:49  * pooyaquit (Quit: pooya)
02:40:28  * qmxchanged nick to qmx|away
02:46:28  * jmar777quit (Remote host closed the connection)
02:46:50  * bradleymeck_quit (Quit: bradleymeck_)
02:47:00  * jmar777joined
02:49:01  * loladirojoined
02:50:57  * bradleymeckjoined
02:51:26  * loladiroquit (Client Quit)
02:51:40  * lohkeypart
02:51:44  * jmar777quit (Ping timeout: 260 seconds)
02:52:03  * lohkey_joined
02:52:03  * lohkey_quit (Client Quit)
02:52:14  * loladirojoined
02:56:07  * loladiroquit (Client Quit)
02:58:27  <hij1nx>isaacs: ping
03:00:24  * bradleymeckquit (Quit: bradleymeck)
03:04:42  * bradleymeckjoined
03:05:48  * bradleymeckquit (Client Quit)
03:27:47  * loladirojoined
03:33:08  * sblomjoined
03:34:26  * sblomquit (Client Quit)
03:49:03  * pooyajoined
03:51:57  * perezdjoined
03:52:22  * bradleymeckjoined
03:52:59  * brsonquit (Ping timeout: 255 seconds)
04:19:46  * kazuponjoined
04:32:02  * brsonjoined
04:38:55  * joshthecoderjoined
04:49:47  * kristatejoined
05:19:56  * bradleymeckquit (Remote host closed the connection)
05:20:11  * bentkusquit (Quit: Lost terminal)
05:30:43  * mmaleckichanged nick to mmalecki[zzz]
05:53:43  * joshthecoderquit (Quit: Leaving...)
05:56:53  * wolfeidauquit (Remote host closed the connection)
06:21:38  * c4milojoined
06:24:01  * mmalecki[zzz]changed nick to mmalecki
06:26:11  * c4miloquit (Ping timeout: 248 seconds)
06:33:56  * paddybyersjoined
06:40:14  * brsonquit (Ping timeout: 240 seconds)
06:42:20  * brsonjoined
06:45:51  * bradleymeckjoined
06:46:33  * cjdquit (Read error: Connection reset by peer)
06:47:29  * cjdjoined
06:58:10  * joshthecoderjoined
06:58:40  * bradleymeck_joined
06:59:47  * bradleymeckquit (Ping timeout: 248 seconds)
06:59:47  * bradleymeck_changed nick to bradleymeck
07:08:15  * AvianFluquit (Remote host closed the connection)
07:09:18  <indutny>mmalecki: yep
07:10:43  <isaacs>hij1nx: pong
07:10:47  <indutny>morning
07:10:50  <isaacs>hij1nx: omw out
07:13:39  <MI6>joyent/node: Shigeki Ohtsu master * 1211946 : stream: fix typo Also: Revert "stream: Override addListener as well as o - http://git.io/grPssw
07:20:41  <indutny>oh
07:20:49  <indutny>isaacs: that explains your commit :)
07:20:55  * kristatequit (Remote host closed the connection)
07:21:14  <isaacs>indutny: yeah, i'd fixed the wrong one
07:32:36  * brsonquit (Read error: Connection reset by peer)
07:44:28  * `3rdEdenjoined
07:47:26  * bradleymeck_joined
07:49:14  * bradleymeckquit (Ping timeout: 260 seconds)
07:49:14  * bradleymeck_changed nick to bradleymeck
07:50:53  * paddybyers_joined
07:54:29  * paddybyersquit (Ping timeout: 260 seconds)
07:54:29  * paddybyers_changed nick to paddybyers
07:56:16  * cjdquit (Ping timeout: 265 seconds)
08:00:07  * rendarjoined
08:11:49  * perezdquit (Quit: perezd)
08:14:46  * joshthecoderquit (Quit: Leaving...)
08:16:20  <MI6>joyent/node: Fedor Indutny v0.8 * 7a2ae4c : object_wrap: add missing HandleScope by Sven Panne's suggestion, see [0] - http://git.io/eZbH6g
08:22:05  * loladiroquit (Quit: loladiro)
08:24:15  * cjdjoined
08:26:32  * bradleymeckquit (Quit: bradleymeck)
08:28:34  * bradleymeckjoined
08:36:37  * loladirojoined
08:54:48  * loladiroquit (Quit: loladiro)
08:55:09  * kazuponquit (Remote host closed the connection)
09:01:39  * kuebkjoined
09:35:41  * bradleymeck_joined
09:42:47  * bradleymeckquit (*.net *.split)
09:42:47  * cjdquit (*.net *.split)
09:42:48  * bradleymeck_changed nick to bradleymeck
09:43:36  * cjdjoined
09:45:55  * kuebkpart
09:47:30  * pooyaquit (Quit: pooya)
10:03:08  * bradleymeck_joined
10:03:59  * bradleymeckquit (Ping timeout: 260 seconds)
10:03:59  * bradleymeck_changed nick to bradleymeck
10:40:56  * einarosquit (Quit: reboot)
10:40:57  * abraxas__quit (Remote host closed the connection)
10:41:37  * bentkusjoined
10:42:22  * abraxas__joined
10:43:17  * abraxas__quit (Remote host closed the connection)
11:03:27  * stagasjoined
11:03:54  * qmx|awaychanged nick to qmx
11:04:24  * Soarezjoined
11:07:57  * Soarezpart
11:15:41  * kuebkjoined
11:15:51  <bentkus>saghul: yo
11:16:03  <saghul>bentkus hey
11:28:55  * einarosjoined
11:36:14  * c4milojoined
11:40:49  * c4miloquit (Ping timeout: 260 seconds)
11:55:34  * stagas_joined
11:56:45  * stagasquit (Ping timeout: 240 seconds)
11:56:59  * stagas_changed nick to stagas
12:11:24  * hzjoined
12:13:09  * wolfeidaujoined
12:14:08  * wolfeidauquit (Remote host closed the connection)
12:14:46  * wolfeidaujoined
12:20:31  * sgallaghjoined
12:20:32  * sgallaghquit (Read error: Connection reset by peer)
12:21:35  * sgallaghjoined
12:38:35  * qmxchanged nick to qmx|brb
12:43:58  * paddybyers_joined
12:47:19  * paddybyersquit (Ping timeout: 260 seconds)
12:47:20  * paddybyers_changed nick to paddybyers
12:53:44  * qmx|brbchanged nick to qmx
13:10:45  * c4milojoined
13:14:10  * bradleymeckquit (Quit: bradleymeck)
13:17:34  * jmar777joined
13:19:01  * AndreasMadsenjoined
13:38:51  * piscisaureus_joined
13:48:03  * loladirojoined
13:55:10  <indutny>piscisaureus_: hey man
13:55:34  <indutny>what do you think about adding RTLD_GLOBAL mode to uv_dlopen()'s dlopen() call
13:55:55  <indutny>ircretary: tell bnoordhuis what do you think about adding RTLD_GLOBAL mode to uv_dlopen()'s dlopen() call?
13:55:56  <ircretary>indutny: I'll be sure to tell bnoordhuis
13:56:00  <indutny>ok, everyone is notified
14:00:48  <piscisaureus_>indutny: what does that do?
14:11:09  <indutny>RTLD_GLOBAL Symbols exported from this image (dynamic library or bundle) will be available to any images build with -flat_namespace option to ld(1) or to calls to dlsym() when
14:11:10  <indutny> using a special handle.
14:11:44  <indutny>but that isn't the reason why I need it
14:11:54  <indutny>the thing is that if you're loading addon now
14:12:01  <indutny>and addon loads another shared library
14:12:11  <indutny>clashing symbols will be loaded two times
14:12:25  <indutny>and each of them will think that it has the right instance
14:12:34  <indutny>piscisaureus_: you understand what I'm talking about?
14:12:39  <indutny>anyway
14:12:45  <indutny>RTLD_GLOBAL is on by default on osx
14:12:48  * jmar777quit (Remote host closed the connection)
14:13:02  <indutny>so if it breaks anything it should have been already broke it
14:13:22  * jmar777joined
14:17:44  * jmar777quit (Ping timeout: 260 seconds)
14:17:46  <piscisaureus_>indutny: ok, yeah that seems fine
14:17:53  <indutny>cool
14:17:57  * piscisaureus_bbl
14:17:58  * bnoordhuisjoined
14:18:01  <indutny>bnoordhuis: heya
14:18:22  <indutny>bnoordhuis: what do you think about using RTLD_GLOBAL in uv_dlopen() by default?
14:22:08  * sblomjoined
14:22:10  * piscisaureus_quit (Ping timeout: 246 seconds)
14:23:27  <sblom>piscisaureus_: trying to wrap up the tcp queueing change today.
14:24:04  <indutny>he's off
14:29:56  * loladiroquit (Quit: loladiro)
14:30:52  * sblomquit (Quit: leaving)
14:32:36  * jmar777joined
14:45:59  * AvianFlujoined
14:57:30  <bnoordhuis>indutny: hola
14:57:34  * piscisaureus_joined
14:58:17  <bnoordhuis>so digid, the dutch sso system for citizen/government systems, is a ruby on rails app
14:58:17  * kuebkquit (Quit: Leaving.)
14:58:27  <bnoordhuis>and has now been taken offline due to that sql injection bug :/
14:59:33  <bnoordhuis>indutny: why RTLD_GLOBAL?
15:03:55  <saghul>Would TCP_DEFER_ACCEPT make sense for libuv?
15:04:15  <saghul>I just found about it here: https://github.com/facebook/tornado/pull/664
15:04:42  <saghul>and hi everyone, btw :-)
15:05:30  * jmar777_joined
15:06:06  * jmar777quit (Ping timeout: 264 seconds)
15:07:11  <piscisaureus_>interesting saghul
15:07:13  <piscisaureus_>bnoordhuis: ^ ?
15:08:32  <bnoordhuis>saghul, piscisaureus_: i've never been able to measure a performance/througput difference
15:08:49  <piscisaureus_>bnoordhuis: apparently for tornado it improved load balancing
15:08:49  <bnoordhuis>with/without TCP_DEFER_ACCEPT, i mean
15:09:03  <bnoordhuis>ah. i never measured _that_ :)
15:09:10  <bnoordhuis>might be worth a try
15:09:42  <saghul>maybe because "This only really matters when dealing with long-lived persistent connections, for example if you have a load balancing proxy server in front of tornado."
15:10:02  <saghul>I have no idea myself, just thought it may be useful :-)
15:10:25  <bnoordhuis>long-lived persistent connections is kind of node's metier
15:10:30  <bnoordhuis>if not raison d'etre
15:10:40  <piscisaureus_>bnoordhuis: snob mode?
15:10:59  <bnoordhuis>no more than usual
15:11:14  * bnoordhuisraises his glass of fine port
15:11:19  <piscisaureus_>metier du jour?
15:11:38  <piscisaureus_>bnoordhuis pays 75% income tax
15:11:50  <bnoordhuis>it's true :(
15:11:53  <bnoordhuis>almost
15:11:56  <piscisaureus_>nah
15:11:57  <piscisaureus_>bs
15:12:23  <bnoordhuis>add VAT and other things and you're close to 75% tax rate in this country
15:12:31  <piscisaureus_>true
15:12:32  <saghul>since we are here, can we fight about uv_break a bit? ;-)
15:12:36  <piscisaureus_>but that works for everyone
15:13:00  <bnoordhuis>piscisaureus_: poor people spend their money on the basics
15:13:10  <bnoordhuis>and that's taxed at 6% instead of 20%
15:13:16  <piscisaureus_>well...
15:13:28  <bnoordhuis>saghul: sure. i don't see the need
15:13:33  <piscisaureus_>bnoordhuis: in fact for high incomes even with 52% marginal income tax pressure ovall taxation is slightly regressive
15:13:46  <piscisaureus_>because you don't spend so much on "basics" any more
15:13:54  <saghul>bnoordhuis would some numbers help you change your mind?
15:14:04  <bnoordhuis>saghul: only if they're all prime
15:14:21  <saghul>I mean, the overhead when using something like Python
15:14:34  <piscisaureus_>only 4, 8, 15, 16, 23 and 42
15:14:41  <bnoordhuis>i like that you respond seriously to that
15:14:54  <bnoordhuis>saghul: but tell me, what overhead and how much
15:16:11  <saghul>bnoordhuis this is python specific, but every time you call uv_run the GIL needs to be released, it's then acquired in every callback where python code needs to run ASO, so calling uv_run in a tight loop suffers
15:16:44  <saghul>But in the end, my point was that if there is a way to run a loop why not have a way to prematurely stop it?
15:17:27  <bnoordhuis>saghul: the GIL comes into play when you use UV_RUN_ONCE?
15:17:42  * indutny-mjoined
15:17:49  <saghul>bnoordhuis well, every call to uv_run, actually
15:17:57  <piscisaureus_>I don't think uv_break would be that bad as long as I don't have to make the guarantee that it will be immediate
15:18:20  <piscisaureus_>I want to make all the callbacks until the poll function is hit again
15:18:21  <saghul>@piscisaureus_ sure, it will break the loop in the next iteration
15:18:47  <saghul>it's up to the user to guarantee that polling will not block
15:19:09  * jmar777_quit (Remote host closed the connection)
15:19:32  <bnoordhuis>saghul: so what's the performance impact of acquiring and releasing the GIL?
15:19:36  <bnoordhuis>i mean, in cold hard numbers
15:19:46  * jmar777joined
15:20:37  <bentkus>PYTHON SUFFERS
15:20:39  <bentkus>mUHAHAHA
15:21:18  <piscisaureus_>saghul: but, why do you have to release and reacquire the GIL all the time? Are you using FFI to call uv_run_once
15:21:19  <piscisaureus_>?
15:22:01  <saghul>bnoordhuis Depends on the benchmark :-S I'll write a test script later today, but if a lot of iterations are made in quick succession (like have an idle handle and do a million iterations) it's noticeable
15:22:56  <saghul>piscisaureus_ because otherwise no other Python thread is able to run
15:23:13  <piscisaureus_>saghul: so if you are using uv_run then the same happens right?
15:23:36  <piscisaureus_>saghul: I don't think uv_break would add much in that respect
15:23:40  <saghul>piscisaureus_ yep
15:23:58  <saghul>piscisaureus_ well, then I wouldn't do the while loop in Python
15:23:59  * indutny-mquit (Quit: Colloquy for iPhone - http://colloquy.mobi)
15:24:22  * jmar777quit (Ping timeout: 256 seconds)
15:24:30  <saghul>the loop just runs and then it can be stopped without that overhead
15:24:38  <piscisaureus_>so then you would release the GIL in prepare and reacquire in a check
15:24:48  <piscisaureus_>or no python thread would ever be able to run
15:26:13  <saghul>piscisaureus_ not really. GIL is released on uv_run and acquired on every callback made by libuv
15:26:40  <piscisaureus_>saghul: haha. Then I think my idea is better :-)
15:27:23  * indutny-mjoined
15:27:41  <indutny-m>bnoordhuis: I'm back
15:27:48  * bnoordhuishides
15:27:57  <saghul>piscisaureus_ I'm not sure, but I don't really want to focus on Python for the uv_break thingy, it's just my example use case :-) I like the idea of it.
15:28:16  <indutny-m>bnoordhuis: So what do you yhink about dlopen?
15:28:29  <bnoordhuis>indutny-m: scroll up. main question is 'why?'
15:28:29  <tjfontaine>indutny-m: his question was "why"
15:28:40  <indutny-m>Oooh
15:29:05  <indutny-m>There are two reasons
15:29:30  <indutny-m>1. Osx is using this mode by default
15:29:58  <indutny-m>2. People were having problems with it
15:30:08  <tjfontaine>2: who?
15:30:21  <indutny-m>Yandex
15:30:35  <bnoordhuis>what tjfontaine said. also, doesn't that mean that those .so's were linked wrong?
15:30:56  <indutny-m>Ehh
15:31:10  <indutny-m>Wait a minute
15:31:23  <indutny-m>I'll turn my notebook on
15:32:00  * bentkusquit (Quit: Lost terminal)
15:33:23  <indutny>ok
15:33:33  <indutny>now finally from a sane keyboard
15:34:00  <indutny>let me quote myself
15:34:01  <indutny>the thing is that if you're loading addon now
15:34:02  <indutny>18:12:02 <•indutny> and addon loads another shared library
15:34:02  <indutny>18:12:12 <•indutny> clashing symbols will be loaded two times
15:34:02  <indutny>18:12:26 <•indutny> and each of them will think that it has the right instance
15:34:18  <indutny>of symbols
15:34:50  <indutny>bnoordhuis: to conclude, dlopen has checks to skip symbols that're already loaded
15:35:10  <indutny>but they do not work now, because this mode isn't specified in dlopen call
15:35:16  <bnoordhuis>you mean A loads B and C, B loads C too?
15:35:24  <indutny>not exactly
15:35:30  <indutny>A has some symbols that C has too
15:35:35  <indutny>err
15:35:38  <indutny>s/A/B
15:35:46  <indutny>and B loads C
15:35:55  <bnoordhuis>'has' or 'requires'?
15:35:58  <indutny>and because B is loaded by A without GLOBAL mode
15:36:02  <indutny>bnoordhuis: has
15:36:37  <bnoordhuis>if both objects have the same symbols, RTLD_GLOBAL will just make things worse, won't it?
15:36:51  <indutny>nope
15:37:07  <indutny>oooh
15:37:10  <indutny>you're so boring
15:37:22  <indutny>my main argument is that this mode is issued by default on osx
15:37:26  <indutny>go argue with this
15:37:27  <bnoordhuis>that's not what your wife said
15:37:39  <indutny>I haven't seen their code
15:37:47  <indutny>but that's how they've explained problem to me
15:37:57  <bnoordhuis>hm, sounds peculiar
15:37:57  <indutny>and my suggestion with RTLD_GLOBAL worked out
15:38:07  <bnoordhuis>but os x does things in peculiar ways, it's true
15:38:12  <indutny>yes
15:38:43  <bnoordhuis>okay, the argument against RTLD_GLOBAL is that it's not the default on other unices
15:39:09  <indutny>any other arguments?
15:39:10  <bnoordhuis>and that it can cause some not quite straightforward behavior
15:39:17  <indutny>example?
15:39:26  <indutny>it isn't causing anything right now
15:39:29  <indutny>at least not on osx
15:39:29  <bnoordhuis>well
15:39:43  <bnoordhuis>say you have two shared objects, A and B
15:39:52  <bnoordhuis>and both depend on a different version of lib X, say openssl
15:40:02  <bnoordhuis>with RTLD_LOCAL, that works
15:40:19  <bnoordhuis>with RTLD_GLOBAL, either A or B will fail to load or worse, it'll bomb
15:40:31  <indutny>bnoordhuis: http://stackoverflow.com/questions/5044993/typeinfo-shared-libraries-and-dlopen-without-rtld-global
15:40:42  <indutny>I think this is what they're experiencing
15:41:16  <indutny>well, not exceptions
15:41:17  <bnoordhuis>indutny: see the first comment on that SO question
15:41:18  <indutny>but typeinfo
15:41:18  * indutny-mquit (Quit: Colloquy for iPhone - http://colloquy.mobi)
15:41:26  <indutny>ooh
15:42:10  <indutny>http://old.nabble.com/singletons,-double-free-errors,-RTLD_GLOBAL,-pycryptopp-td33201128.html
15:42:21  <indutny>"I guess on
15:42:22  <indutny>Linux the module loading flags default to RTLD_LOCAL instead of
15:42:23  <indutny>RTLD_GLOBAL, which I think should be causing a failure of cross-module
15:42:24  <indutny>typeinfo comparison"
15:42:42  <bnoordhuis>oh yeah, that too
15:43:06  <bnoordhuis>yeah, if both shared objects think they're the sole owners of data structure X
15:43:28  <indutny>https://github.com/cocaine/cocaine-core/blob/master/include/cocaine/repository.hpp#L144
15:43:30  <bnoordhuis>if RTLD_GLOBAL is the default on os x, then how does that work?
15:43:37  <indutny>man
15:43:43  <indutny>you ask me
15:43:51  <bnoordhuis>i ask you
15:44:04  <indutny>I think only one instance of structure X is used
15:45:35  <bnoordhuis>indutny: so... are you still convinced that RTLD_GLOBAL is a good thing?
15:45:38  <indutny>because linked code works
15:45:45  <indutny>yes
15:45:51  <indutny>actually
15:45:57  <indutny>I convinced that shared libraries are total evil
15:46:10  <tjfontaine>I really hate this argument
15:46:21  <bnoordhuis>tjfontaine: this == ?
15:46:30  <tjfontaine>the shared libraries are evil one :)
15:46:47  <bnoordhuis>ah. well, admittedly i'm not a fan either
15:47:11  <bnoordhuis>i was until i discovered the brain damage that is symbol versioning
15:47:13  <indutny>bnoordhuis: so you think dlopen() will fail if there're symbol clash
15:47:17  <indutny>and RTLD_GLOBAL is set
15:47:29  <indutny>and will work only if RTLD_LOCAL is set
15:47:33  <indutny>right?
15:47:33  <bnoordhuis>indutny: well, no. i think it will become more unpredictable than it is now
15:47:42  <indutny>ok
15:47:54  <indutny>so I should tell this guys to gfy
15:48:00  <indutny>ok, sounds plausible
15:48:13  <indutny>well, actually no
15:48:17  <bnoordhuis>indutny: if s/he has very good arguments, let him/her open an issue
15:48:18  <tjfontaine>well if they want rtld_global they can specify it by loading the module with ffi
15:48:20  <indutny>bnoordhuis: why is it unpredictable?
15:48:53  <bnoordhuis>indutny: because the behavior with RTLD_LOCAL is not dependent on shared object load order
15:49:05  <indutny>what's shared object anyway?
15:49:11  <indutny>static structure instance?
15:49:12  <bnoordhuis>indutny: .so, .dylib
15:49:19  <indutny>ok
15:49:35  <indutny>well, considering that the most of node addons ain't doing dlopen()
15:49:43  <indutny>and those who are may figure it out
15:49:49  <indutny>probably they even won't notice it
15:50:08  <bnoordhuis>"most" "may" "probably" <- not remotely good enough
15:50:50  <indutny>well, your only argument is that it's a change
15:50:56  <indutny>and you don't understand why it's really needed
15:51:09  <bnoordhuis>i think i understand
15:51:15  <bnoordhuis>but i don't think it's a change for the better
15:51:30  <indutny>what could go wrong?
15:51:36  * bnoordhuisgroans
15:51:54  <bnoordhuis>you don't expect a serious answer, do you?
15:52:04  <bnoordhuis>if you do, i refer you to your irc client's scrollback function
15:52:09  <indutny>haha
15:52:14  <indutny>no
15:52:23  <indutny>ok, let me think about it
15:52:28  <bnoordhuis>do that :)
15:52:40  <bnoordhuis>if you have convincing arguments, i'll listen
15:56:51  * pooyajoined
16:00:05  <indutny>still thinking...
16:01:06  * qmxchanged nick to qmx|lunch
16:13:32  * mjr_joined
16:14:07  <indutny>odd
16:14:13  <indutny>this typeid() thing works for me locally
16:14:29  <indutny>that rtti shit looks completely disgusting to me
16:14:36  <indutny>why are people inventing it?
16:16:58  * pooyaquit (Quit: pooya)
16:19:12  <indutny>bnoordhuis: https://gist.github.com/51e23e29bd1799518a81
16:20:42  <indutny>can you try this?
16:22:11  * loladirojoined
16:23:13  * mikealquit (Quit: Leaving.)
16:24:35  * loladiroquit (Client Quit)
16:26:45  <MI6>joyent/libuv: Ben Noordhuis master * 9eedd32 : build: make clean target remove libuv.{a,so,dylib} - http://git.io/cG6E-Q
16:29:05  * travis-cijoined
16:29:05  <travis-ci>[travis-ci] joyent/libuv#1013 (master - 9eedd32 : Ben Noordhuis): The build was broken.
16:29:05  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/bc0c61cd7fa9...9eedd32e409b
16:29:05  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/4048210
16:29:05  * travis-cipart
16:29:13  <indutny>muhahaha
16:32:40  * c4miloquit (Read error: Connection reset by peer)
16:32:46  * c4milo_joined
16:32:54  <bnoordhuis>indutny: what should i try / test for?
16:33:00  <indutny>wait a minute
16:33:03  <indutny>it's borked on linux
16:33:08  <indutny>stupid osx
16:33:16  <indutny>why is stuff always working here
16:33:19  <indutny>when it should not
16:33:21  <indutny>I mean
16:33:23  <indutny>missing -ldl
16:33:27  <indutny>and everything else
16:35:12  <indutny>the thing is that RTLD_LOCAL works for me on osx
16:35:19  <indutny>typeid() is equal
16:35:36  * Raltquit (Remote host closed the connection)
16:36:01  <indutny>bnoordhuis: updated gist, can you please try running make && ./3
16:37:01  <bnoordhuis>indutny: 3: 3.cc:15: int main(): Assertion `a_fn != __null' failed.
16:37:01  <bnoordhuis>Aborted (core dumped)
16:37:07  <indutny>oh
16:37:10  <indutny>shit
16:37:15  <indutny>that was dlsym()
16:37:45  <indutny>I wonder why it has failed to find symbol
16:37:58  <indutny>ah
16:38:01  <indutny>extern vs extern "C"
16:38:04  <indutny>ok, that explains it
16:38:23  <indutny>ok, so it works on ubuntu too
16:38:49  * pooyajoined
16:39:14  * `3rdEdenchanged nick to `3E|DINNER
16:39:27  <indutny>bnoordhuis: updated gist, should be working now
16:39:30  <indutny>and also
16:39:39  <indutny>typeid() seems to be identical
16:39:44  <bnoordhuis>indutny: yes, works and identical
16:39:55  <indutny>regardless LOCAL/GLOBAL thing
16:40:19  <indutny>bnoordhuis: do you think my code is correct?
16:40:24  <indutny>I mean, yes it's working
16:40:34  <indutny>but I can't see reported issue
16:41:04  <bnoordhuis>indutny: it looks okay to me
16:41:14  <indutny>ok, thanks
16:41:18  <bnoordhuis>it's technically possible for different modules to be compiled with different abis
16:41:24  <indutny>I'll tell guys to give me reproducible test case
16:41:29  <bnoordhuis>but that's more theoretical than realistic
16:49:11  <MI6>joyent/node: Dean McNamee master * c207d40 : typed arrays: implement load and store swizzling Implement load and stor (+2 more commits) - http://git.io/Ox6keA
16:56:41  <hij1nx>isaacs: ping
16:57:27  * piscisaureus_bbl
16:57:30  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
16:59:28  * pooyaquit (Quit: pooya)
17:02:52  * pooyajoined
17:03:21  * pooyaquit (Read error: Connection reset by peer)
17:03:40  * pooyajoined
17:08:40  * TheJHjoined
17:09:32  * AndreasMadsenquit (Remote host closed the connection)
17:15:46  * pooyaquit (Ping timeout: 246 seconds)
17:19:58  * dapjoined
17:20:56  * loladirojoined
17:24:29  <isaacs>hij1nx: pong
17:29:28  * qmx|lunchchanged nick to qmx
17:30:17  * loladiroquit (Quit: loladiro)
17:38:31  * jmar777joined
17:39:22  * joshthecoderjoined
17:42:08  * loladirojoined
18:02:56  * `3E|DINNERquit (Remote host closed the connection)
18:03:46  * mikealjoined
18:07:17  * pooyajoined
18:10:18  * pooyaquit (Client Quit)
18:12:22  * c4milo_quit (Remote host closed the connection)
18:12:46  * pooyajoined
18:14:32  * pooya_joined
18:15:18  * pooyaquit (Read error: Connection reset by peer)
18:15:19  * pooya_changed nick to pooya
18:30:35  * `3rdEdenjoined
18:35:03  * lohkeyjoined
18:37:27  * AndreasMadsenjoined
18:37:51  <isaacs>favorite song: http://usevista.ytmnd.com/
18:39:16  <CoverSlide>hahaha
18:41:26  * saghulquit (Ping timeout: 252 seconds)
18:42:18  <AndreasMadsen>That is just hilarious
18:43:16  * saghuljoined
18:43:36  * bradleymeckjoined
18:46:21  <isaacs>I
18:46:22  <isaacs>LOVE
18:46:23  <isaacs>THIS
18:46:25  <isaacs>COMPANY
18:46:27  <isaacs>YEAAAHAHHAHHH!!!
18:46:31  <isaacs>that's my favorite part
18:49:10  <isaacs>the word "developers" has no meaning to me now
18:49:15  <isaacs>it's just a sound
18:50:23  <AndreasMadsen>Found the mp3. Download the new ballmer hit, already today. http://users.content.ytmnd.com/c/9/0/c900da8554a61028aef9574a2f4ec2b7.mp3
18:51:20  * CoverSlidequit (Ping timeout: 252 seconds)
18:52:40  * kuebkjoined
18:53:35  * c4milojoined
18:54:45  * joshthecoderquit (Quit: Leaving...)
18:55:46  * tellnesjoined
18:56:08  * CoverSlidejoined
18:59:17  * brsonjoined
19:06:05  * bradleymeckquit (Remote host closed the connection)
19:08:36  <indutny>hohohoho
19:08:53  <indutny>isaacs: hey
19:09:30  <indutny>.push() thing looks really practical to me
19:09:40  <indutny>haven't fully reviewed it yet
19:09:45  <indutny>especially http parts
19:10:10  <isaacs>indutny: yeah, AndreasMadsen's comment about Transform usage there seems really insightful especially
19:10:14  <isaacs>it's super handy, though.
19:10:18  <indutny>yes
19:10:27  <indutny>basically it allows you to return to previous behaviour
19:10:34  <indutny>emitting data when you receive it
19:11:26  <dap>Is the default HTTP server request timeout documented somewhere?
19:11:36  <indutny>hm...
19:11:41  <indutny>good question
19:11:49  <indutny>nope
19:12:18  <dap>thanks :)
19:12:32  <dap>what's the right way to override it?
19:12:42  <indutny>req.setTimeout()
19:12:54  <indutny>http://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback
19:13:08  <indutny>it should be 60sec now
19:13:23  <indutny>I mean, by default
19:13:48  <isaacs>it's 120sec by default
19:13:53  <indutny>isaacs: huh?
19:13:58  <isaacs>indutny: why should it be 60 seconds?
19:14:01  <indutny>aaah
19:14:04  <dap>socket.setTimeout, or req.setTimeout? It's confusing because if I call request.setTimeout, it says it just calls socket.setTimeout, but socket.setTimeout goes out of its way to say that it only emits "timeout", but does not destroy the socket. But because request.connectionListener adds a 'timeout' event listener, I think it will actually close the socket.
19:14:05  <indutny>right
19:14:06  <indutny>2 * 60
19:14:16  <indutny>dap: req.setTimeout calls socket.setTimeout
19:14:30  <indutny>oh
19:14:36  <isaacs> socket.setTimeout(2 * 60 * 1000); // 2 minute timeout
19:14:37  <dap>… but because of the default 'timeout' listener, it will *also* cause the connection to be destroyed
19:14:43  <indutny> socket.once('timeout', function() {
19:14:44  <indutny> socket.destroy();
19:14:44  <indutny> });
19:14:45  <dap>whereas socket.setTimeout does not.
19:14:48  <indutny>dap: that's from http
19:14:51  <dap>at least, according to its documentation.
19:14:52  <dap>right.
19:15:26  <dap>Do you see what I'm saying?
19:15:56  <indutny>yes, I see it now
19:16:28  <indutny>but there're no default 'timeout' listener
19:16:37  <dap>There is — it's the once you pasted above
19:16:44  <isaacs>dap: it's pretty ugly... but you can do req.socket.removeAllListeners('timeout') and then go to town
19:16:47  <indutny>nope
19:16:50  <indutny>dap: it's from http
19:16:54  <dap>isaacs: yeah, breaking who knows what else :)
19:16:58  <dap>indutny: Yeah, I know.
19:17:05  <isaacs>indutny: dap's saying that the one in http is set by default in http
19:17:05  <indutny>ok, I'm missing the point then
19:17:13  <indutny>aaah
19:17:19  <indutny>so it's like I want to override it
19:17:21  <isaacs>indutny: there's no way to have http NOT attach that listener
19:17:22  <dap>indutny: AFAICT, there's no (reasonable) way to make it so that the request doesn't get destroyed on "timeout"
19:17:24  <indutny>but there're no special function to do it
19:17:35  <indutny>hm...
19:17:39  <dap>And that's fine, except that the documentation *explicitly* says it won't destroy it by default :)
19:17:46  <indutny>hehe
19:17:47  <dap>that you have to do that yourself.
19:17:47  <isaacs>dap: ideally, we should expose that default timeout listener somewhere, so that you can remove it, but... ugh.
19:17:47  <indutny>ok
19:18:06  <dap>isaacs: alternatively, if I call setTimeout on the request, you remove the listener
19:18:08  <isaacs>dap: probably, even if we did socket.once('timeout', socket.destroy) then you could remove it easily enouhg]
19:18:13  <isaacs>dap: sure.
19:18:17  <indutny>yeah
19:18:18  <isaacs>so if you do a timeout listener, we remove ours
19:18:33  <dap>Right. Of course, if I do it again, you shouldn't remove my first one.
19:18:38  <isaacs>i gotta run to class. i'll be back online in a few hours with some thoughts.
19:18:44  <tjfontaine>it is socket.once('timeout', socket.destroy)
19:18:48  <dap>Okay. I can work around this.
19:19:11  <dap>I'll file an issue for tracking...
19:19:59  * paddybyersquit (Ping timeout: 255 seconds)
19:20:49  <indutny>dap: thanks
19:20:54  <dap>Thank you guys :)
19:21:03  <dap>Glad I'm not just crazy.
19:25:06  * loladiro_joined
19:28:02  * joshthecoderjoined
19:28:22  * loladiroquit (Ping timeout: 245 seconds)
19:28:22  * loladiro_changed nick to loladiro
19:28:45  <dap>#4548
19:28:49  <dap>https://github.com/joyent/node/issues/4548
19:31:05  <isaacs>tjfontaine: no, it's wrapped in a closure, isn't it?
19:31:29  <isaacs>tjfontaine, dap: if it's not, you could do socket.removeListener('timeout', socket.destroy)
19:31:40  <dap>It's wrapped in a closure
19:31:43  <isaacs>that would be a suitable workaround.
19:32:09  <isaacs>dap: would you be ok if we just gave you a way to explicitly remove it yoursefl?
19:32:17  <isaacs>dap: would that solve your problem, or is there some other aspect?
19:32:26  <AndreasMadsen>isaacs: thanks, my pleasure
19:35:06  <dap>isaacs: You may be better off just documenting the current behavior: first that there *is* a default timeout, and second that the socket is destroyed on timeout, even if you change the timeout (i.e. request.setTimeout != socket.setTimeout). I actually do want the socket destroyed in my case, so while I really hate it when lower layers assume what the caller wants in a way that can't be overridden, in this case it happens to be correct.
19:37:36  * AvianFluquit (Remote host closed the connection)
19:38:35  <isaacs>dap: i think the reason behind that decision is that in most http things "timeout" = "error, kill with fire"
19:38:43  <isaacs>dap: but tcp, not always
19:38:53  <isaacs>ok, gota run. bbiab
19:38:56  <dap>I know, but when you make that call, you're not assuming most, you're assuming all :)
19:39:09  <isaacs>i mean, most existing http things assume all
19:39:19  <dap>Yeah, that drives me nuts when it's wrong
19:39:21  <isaacs>yeah
19:39:23  <isaacs>i hear ya.
19:39:25  <isaacs>we should be better :)
19:39:27  * isaacs&
19:39:35  <dap>No worries.
19:40:08  <tjfontaine>isaacs: ya sorry I didn't realize what you were driving at
19:44:39  * qmxchanged nick to qmx|away
19:50:51  * mikealquit (Quit: Leaving.)
19:52:42  * mikealjoined
19:55:16  * lohkeyquit (Quit: lohkey)
20:08:49  * paddybyersjoined
20:33:49  * AvianFlujoined
20:49:48  * lohkeyjoined
20:56:44  * sgallaghquit (Remote host closed the connection)
21:04:33  * pooyaquit (Quit: pooya)
21:05:29  * pooyajoined
21:27:48  * hzquit (Disconnected by services)
21:27:51  * hzjoined
21:27:55  * kuebkquit
21:28:19  * AndreasMadsenquit (Remote host closed the connection)
21:38:42  * jmar777quit (Remote host closed the connection)
21:39:16  * jmar777joined
21:43:02  * rendarquit
21:43:32  * jmar777quit (Ping timeout: 255 seconds)
21:46:26  <loladiro>bnoordhuis: If piscisaureus stops by, tell him we are now using libuv for all platforms with Julia. He wanted to know when we merged that branch
21:46:59  <bnoordhuis>ircretary: tell piscisaureus julia now uses libuv on all platforms
21:46:59  <ircretary>bnoordhuis: I'll be sure to tell piscisaureus
21:47:05  <bnoordhuis>loladiro: ^ :)
21:47:11  * wolfeidauquit (Remote host closed the connection)
21:48:24  <mmalecki>bnoordhuis: ping pong
21:48:30  <bnoordhuis>mmalecki: sup?
21:48:36  <mmalecki>bnoordhuis: dat pull request
21:48:56  <mmalecki>ah, you commented
21:48:58  <mmalecki>okay
21:49:11  <mmalecki>bnoordhuis: I'll move my PC from living room tomorrow and actually code it
21:49:13  <mmalecki>sgty?
21:49:24  <bnoordhuis>sure
21:59:25  <MI6>joyent/node: Daniel Aquino v0.8 * 8c38ef8 : install: include DESTDIR in npm shebang Include DESTDIR in the npm sheba - http://git.io/djs-MA
22:00:10  * hzquit
22:01:48  * piscisaureus_joined
22:01:56  <piscisaureus_>hello
22:01:59  <piscisaureus_>ircretary: notes
22:03:02  <isaacs>you all should just use irssi in a detached shell
22:03:08  <tjfontaine>amen.
22:03:13  <isaacs>it's so nice
22:03:36  <isaacs>i like keeping people guessing. "is he really here? is he really away?" YOU CAN NEVER BE SURE I AM LIKE A GHOST AND THAT IS NINJALIKE ETC.
22:03:49  * wolfeidaujoined
22:03:50  <tjfontaine>it's only slightly depressing after someone dies
22:03:54  <isaacs>aw..
22:03:59  <isaacs>yeah, that's super depressing.
22:04:25  <tjfontaine>eventually they pingout after the payment doesn't succeed, I once idled in a channel with someone who had *just* paid for a year
22:05:41  <indutny>oh
22:05:46  <indutny>you guys are so miserable
22:05:50  <tjfontaine>just me.
22:06:03  <indutny>yes
22:06:05  <indutny>just you
22:08:38  <bnoordhuis>sorry, force push coming up - that v0.8 commit shouldn't have landed
22:09:07  <MI6>joyent/node: Fedor Indutny v0.8 * 7a2ae4c : object_wrap: add missing HandleScope by Sven Panne's suggestion, see [0] - http://git.io/WoLZ2Q
22:09:08  <indutny>bnoordhuis: you mean my commit?
22:09:27  <bnoordhuis>indutny: no. scroll up ~20 lines
22:09:46  <indutny>just tell me sha hash
22:09:54  <indutny>:)
22:10:02  <isaacs>bnoordhuis: anything else you want to land on 0.8?
22:10:05  <isaacs>i'm about to cut 0.8.17
22:10:12  <bnoordhuis>isaacs: no, nothing
22:10:15  <bnoordhuis>well
22:10:20  <bnoordhuis>one sec
22:10:27  <mjr_>He we are finally rolling out node 0.8 to production at long last.
22:10:39  <mjr_>Just in time for node 0.10
22:12:02  <isaacs>:)
22:13:15  <CoverSlide>awesome
22:13:58  <mjr_>Yeah, going to 0.8 was way harder for us than going to 0.6.
22:14:10  <CoverSlide>what was the main blocker?
22:14:11  <isaacs>mjr_: that's really odd.
22:14:24  <isaacs>mjr_: i mean, i was hearing all about it, but still. counterintuitive.
22:14:28  <isaacs>0.6 broke TONS of shit
22:14:33  <indutny>mjr_: haha
22:14:41  <indutny>mjr_: I'm sure 0.10 will be as hard as 0.8
22:14:47  <indutny>mjr_: considering streams2
22:14:48  <CoverSlide>mjr_: do you guys have a lot of compiled stuff?
22:14:50  <isaacs>indutny: harder, probably ;)
22:15:03  <indutny>mjr_: but we'll figure it out ;)
22:15:15  <mjr_>The largest pain with 0.8 was that https got way worse.
22:15:30  <isaacs>ah, yeah. but that got fixed, no?
22:15:36  <CoverSlide>so it wasn't incompatibility, just performance?
22:15:43  <isaacs>mjr_: i mean, it's been improved considerably since 0.8.0
22:15:44  <mjr_>Yeah, but we went to use stud instead.
22:16:06  <mjr_>I'll bet it has gotten better, yes, but we are really cautious about it right now.
22:16:30  <mjr_>CoverSlide: no, the compatibility was fine. It was all bugs and performance.
22:16:43  <isaacs>mjr_: put another way: it is my understanding that https in 0.8.latest is better than in 0.6.latest
22:16:52  <isaacs>mjr_: but stud is probably better still.
22:16:55  <CoverSlide>stud's the way to go, not a whole lot of point to having the app do tls
22:17:10  <mjr_>node 0.8 ended up leaking fds due to what was probably a bug in our code, but still it didn't leak under 0.6.
22:17:21  <mjr_>CoverSlide: except you lose the client IP address.
22:17:24  <CoverSlide>i haven't had a chance to benchmark haproxy's ssl stuff, but haproxy has ssl now, so that's what I'm using
22:17:25  <isaacs>mjr_: and you made a wise move hiring the guy with the power to make node's tls much better :)
22:17:49  <mjr_>node 0.8 also uses way more memory than 0.6, for reasons we don't yet fully understand.
22:17:54  <CoverSlide>mjr_: yeah doesn't mikeal have a module for that, with the PROXY header?
22:18:14  <indutny>mjr_: I think tlsnappy might be worth trying it
22:18:29  <indutny>I'm still checking all the things
22:18:35  <indutny>but so far it looks pretty solid
22:18:40  <mjr_>CoverSlide: yes, but that runs as a separate service, which I didn't want to do. So we intercept the http server's connection event and parse out the PROXY line, then hand it back to node.
22:18:49  <indutny>especially, compared to https in node
22:19:07  <mjr_>indutny: yes, I'm looking forward to trying tlsnappy soon.
22:19:24  <mjr_>We finally implemented our own http client keepalive logic now.
22:19:45  * dap1joined
22:20:01  <indutny>heh
22:21:44  * dapquit (Ping timeout: 240 seconds)
22:22:36  * kuebkjoined
22:24:11  * dap1quit (Ping timeout: 252 seconds)
22:25:23  <mjr_>I got up early and talked about node for this show: http://twit.tv/floss237 Came out a lot fluffier than I was expecting.
22:25:55  <CoverSlide>oh nice, been wondering when the node show was gonna be on
22:26:13  <CoverSlide>he mentioned it on the last show
22:37:05  * `3rdEdenquit (Quit: Zzzzz)
22:38:38  <isaacs>mjr_: nice :)
22:39:01  <isaacs>mjr_: wait, was that the show that you wanted me to be on with you but i was in mexico so no?
22:54:04  * c4miloquit (Remote host closed the connection)
22:54:11  * TheJHquit (Ping timeout: 255 seconds)
23:21:52  <MI6>joyent/node: isaacs v0.8 * aa742dd : npm: Upgrade to v1.2.0 - http://git.io/tUkg7w
23:24:32  <bnoordhuis>piscisaureus_: you around for another 30 minutes or so?
23:26:02  * piscisaureus_quit (Ping timeout: 255 seconds)
23:28:35  * piscisaureus_joined
23:28:41  * piscisaureus_part
23:28:44  * piscisaureus_joined
23:28:50  <piscisaureus_>bnoordhuis: no. what's up?
23:29:03  <bnoordhuis>piscisaureus_: working on a patch i'd like you to review
23:29:30  <piscisaureus_>meh
23:29:36  <piscisaureus_>bnoordhuis: is it finished already?
23:29:39  <bnoordhuis>one that should stop evil hackers from taking over your pc
23:29:49  <piscisaureus_>bnoordhuis: oh, let them try
23:31:25  * stagasquit (Read error: Connection reset by peer)
23:32:37  <piscisaureus_>bnoordhuis: so em - can I do it tomorrow? Or are we really in a hurry?
23:37:16  <mjr_>isaacs: yes, that was the one
23:39:20  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
23:41:20  * paddybyersquit (Ping timeout: 256 seconds)
23:43:04  <bnoordhuis>damnit, of he goes
23:43:05  <MI6>joyent/node: bnoordhuis created branch bert-belder-review-this - http://git.io/uiX1lg
23:43:15  <bnoordhuis>isaacs: guess you'll have to review it ^
23:48:04  <isaacs>looking
23:49:41  <isaacs>bnoordhuis: why is size not being multiplied by element_size any more?
23:50:14  <bnoordhuis>aw
23:50:22  * dapjoined
23:50:26  <bnoordhuis>good thing we have reviews
23:50:28  <isaacs>hooray! i'm useful!
23:51:23  <dap>isaacs, indutny: Re: #4548: I read the code wrong. The problem's not as bad as I thought because server requests don't have a setTimeout method. I updated the ticket.
23:51:28  <MI6>joyent/node: Ben Noordhuis bert-belder-review-this * bd57256 : typed arrays: fix 32 bit size/index overflow Fix an out-of-bound read/wr - http://git.io/Z3VQ9Q
23:51:52  <dap>OTOH, I realized that I actually *don't* want Node to ever destroy that request, and my workaround is to use my own timeout and set the default one to a very high value. :-/
23:52:29  <bnoordhuis>isaacs: round 2? ^
23:54:57  <isaacs>bnoordhuis: lgtm
23:55:13  <isaacs>dap: You can set the default one to Infinity
23:55:22  <isaacs>dap: oh, actually, no, that'll probably be bad :)
23:55:34  <dap>it's okay. I set it to 2x mine.
23:55:43  <MI6>joyent/node: Ben Noordhuis v0.8 * ed825f4 : typed arrays: fix 32 bit size/index overflow Fix an out-of-bound read/wr - http://git.io/V71aRQ
23:55:49  <isaacs>dap: i think we treat infinite numbers as "invalid" and give them the null treatment
23:55:57  <isaacs>bnoordhuis: great
23:55:59  <isaacs>thanks!
23:58:32  <CoverSlide>setTimeout(startCaringAboutYourProblem, Infinity)
23:58:39  <MI6>joyent/libuv: isaacs created tag node-v0.8.17 - http://git.io/TQnLIg