00:00:00  * daviddiasjoined
00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:01:01  * seldoquit (Remote host closed the connection)
00:02:01  * daviddiasquit (Read error: No route to host)
00:03:07  * TooTallNatequit (Quit: ["Textual IRC Client: www.textualapp.com"])
00:06:35  <tjfontaine>piscisaureus: i think it's easier to say where you shouldn't go :)
00:07:00  * seldojoined
00:07:18  * seldoquit (Remote host closed the connection)
00:12:40  * seldojoined
00:17:13  * indexzerojoined
00:21:27  * sblomquit (Read error: Connection reset by peer)
00:22:27  * seldoquit (Remote host closed the connection)
00:24:47  * paulfryzelquit (Remote host closed the connection)
00:25:22  * paulfryzeljoined
00:25:34  * thlorenzjoined
00:25:44  * seldojoined
00:26:35  * rosskquit
00:26:51  * paulfryzelquit (Read error: Connection reset by peer)
00:27:18  * paulfryzeljoined
00:31:28  * indexzeroquit (Ping timeout: 245 seconds)
00:31:45  * seldoquit (Remote host closed the connection)
00:31:49  * paulfryzelquit (Ping timeout: 246 seconds)
00:32:15  * seldojoined
00:35:24  <piscisaureus>trevnorris: threads have no callback
00:35:27  * c4milojoined
00:35:38  <piscisaureus>trevnorris: the "callback" runs truly in parallel. Welcome to the good old world of threads.
00:36:03  <piscisaureus>trevnorris: if you join(thread1); join(thread2) both thread1 and thread2 run in parallel
00:36:17  <piscisaureus>the main thread first awaits thread1 to complete and then thread2 to complete
00:37:00  <piscisaureus>trevnorris: so the problem with that test is that 1e6 threads cannot exist at the same time
00:37:17  <piscisaureus>you could create 1000 and then await the 1st before creating the 1001th
00:37:29  <piscisaureus>so you are sure there are never more than 1000 at the same time
00:39:49  <trevnorris>ok. so i'm a little confused by "in parallel". to me, that makes it sound like each thread is executed at the same time.
00:39:53  * c4miloquit (Ping timeout: 246 seconds)
00:41:20  * paulfryzeljoined
00:42:20  <trevnorris>wait. got it. thanks for the explanation
00:45:58  * paulfryzelquit (Ping timeout: 252 seconds)
00:46:23  <piscisaureus>trevnorris: haha
00:46:36  <piscisaureus>trevnorris: yes each thread is executed at the same time more or less
00:48:10  * AlexisMochaquit (Ping timeout: 252 seconds)
00:48:43  * AlexisMochajoined
00:49:11  * TooTallNatejoined
00:50:55  * mikolalysenkoquit (Ping timeout: 252 seconds)
00:52:15  <trevnorris>piscisaureus: yeah. just got it. the thread is executed on create, but then join pauses the main thread until the passed thread has completed. correct?
00:55:05  <piscisaureus>trevnorris: right on!
00:55:07  * mikolalysenkojoined
00:55:22  <piscisaureus>trevnorris: and join also cleans up the resources that were allocated for the thread
00:56:05  * paulfryzeljoined
00:56:36  <trevnorris>you mean if I don't join the thread then the thread's stack won't be cleaned up?
00:57:30  <piscisaureus>trevnorris: not sure about the stack. The posix spec doesn't say.
00:57:40  <piscisaureus>trevnorris: "Failure to join with a thread that is joinable (i.e., one that is not detached), produces a "zombie thread". Avoid doing this, since each zombie thread consumes some system resources, and when enough zombie threads have accumulated, it will no longer be possible to create new threads (or processes)."
00:58:01  <piscisaureus>trevnorris: the alternative is to "detach" a thread - after that you can no longer join a thread (nor do you need to)
00:58:22  <piscisaureus>the same can be implemented on windows, I'm not sure if we have a uv_thread_detach api at this point but we could add one trivially
00:59:05  <trevnorris>nope, uv doesn't
00:59:20  <piscisaureus>trevnorris: most likely the error you're seeing is just the PID/TID table getting full
00:59:22  <piscisaureus>or some ulimit
00:59:27  <piscisaureus>... being enforced
00:59:29  <trevnorris>yeah. that's the issue
00:59:39  <trevnorris>hitting the maximum number of allowed threads per process
01:00:10  * paulfryzelquit (Ping timeout: 246 seconds)
01:02:43  * sblomjoined
01:04:23  * Qardquit (Ping timeout: 246 seconds)
01:10:43  * AlexisMochaquit (Ping timeout: 252 seconds)
01:12:31  * kevinsimperquit (Remote host closed the connection)
01:13:02  * AlexisMochajoined
01:13:19  * brunklejoined
01:13:33  * kazuponjoined
01:18:02  * sblomquit (Read error: Connection reset by peer)
01:20:59  * hzquit
01:24:19  * brunklequit (Quit: brunkle)
01:28:17  <piscisaureus>tjfontaine: thanks, good news :)
01:31:21  <piscisaureus>tjfontaine: mere luck though :)
01:36:27  * c4milojoined
01:36:53  * seldoquit (Remote host closed the connection)
01:37:11  * dap_joined
01:39:21  * dap_1quit (Ping timeout: 255 seconds)
01:40:59  * c4miloquit (Ping timeout: 252 seconds)
01:41:36  * paulfryzeljoined
01:44:47  * cosnisjoined
01:56:11  * paulfryz_joined
01:57:48  * paulfryz_quit (Read error: Connection reset by peer)
01:57:59  * paulfryz_joined
02:00:13  * mikolalysenkoquit (Ping timeout: 240 seconds)
02:00:51  * dap_quit (Quit: Leaving.)
02:02:08  * paulfryz_quit (Ping timeout: 240 seconds)
02:02:24  <Dirkson>Ok. So when my udp receive event fires, libuv hands me a sockaddr struct that contains the information about the sender. I cast this into a sockaddr_in struct in order to use it for my uv_udp_send. When I check the sockaddr_in struct's port, it is NOT the same as the destination port OR the source port. In short: How do I use an incoming packet's source port as its destination port?
02:02:51  <Dirkson>Er... How do I use an incoming packet's source port as its reply packet's destination port?
02:03:38  * edwin_liuquit (Ping timeout: 240 seconds)
02:04:41  * rjequit (Read error: Connection reset by peer)
02:05:58  * TooTallNatequit (Quit: Computer has gone to sleep.)
02:06:54  * benviequit (Ping timeout: 255 seconds)
02:07:17  * TooTallNatejoined
02:09:18  * TooTallNatequit (Read error: Connection reset by peer)
02:12:28  * rjejoined
02:13:07  * benviejoined
02:15:50  <Dirkson>Heck, I'd be a little chuffed if I could suss out how to set the source port full stop.
02:16:44  * brsonquit (Quit: leaving)
02:18:22  * seldojoined
02:20:08  * brsonjoined
02:20:38  * edwin_liujoined
02:22:10  * cosnisquit (Quit: Textual IRC Client: www.textualapp.com)
02:23:49  * cosnisjoined
02:25:54  * thlorenzquit (Remote host closed the connection)
02:26:27  * thlorenzjoined
02:29:00  * AvianFlujoined
02:29:26  * thlorenzquit (Remote host closed the connection)
02:30:11  * thlorenzjoined
02:34:22  * euoiajoined
02:35:14  * mikealquit (Ping timeout: 255 seconds)
02:38:45  * thlorenzquit (Ping timeout: 252 seconds)
02:41:27  * mikealjoined
02:55:34  <piscisaureus>uv_udp_bind
02:58:41  * paulfryz_joined
02:59:18  * euoiaquit (Ping timeout: 240 seconds)
03:01:36  <trevnorris>piscisaureus: ping
03:01:53  <piscisaureus>trevnorris: sup?
03:03:01  * paulfryz_quit (Ping timeout: 246 seconds)
03:03:15  <trevnorris>piscisaureus: pthread_self() is supposed to return a pthread_t. so I'd assume that uv_thread_self should return uv_thread_t, but instead it returns an unsigned long.
03:03:20  <trevnorris>piscisaureus: what am I missing?
03:03:33  <piscisaureus>well there are two problems here
03:03:53  <piscisaureus>the pthread_t could in theory be a struct but in practice it never is
03:04:01  <piscisaureus>but that means that it's a bit questionable to return a long
03:04:14  <piscisaureus>* to cast it to a long
03:04:16  <piscisaureus>also
03:04:29  <piscisaureus>pthread_self() is supposed to return a valid pthread_t but not necessarily the same one every time
03:04:30  <piscisaureus>so
03:04:34  * stagasquit (Read error: Connection reset by peer)
03:04:45  <piscisaureus>depending on your use case it may or may not be suitable
03:05:02  <piscisaureus>I think what people really want to be able to do is
03:05:14  <piscisaureus>uv_thread_id t;
03:05:32  * brsonquit (Quit: leaving)
03:05:34  <piscisaureus>uv_thread_id t1 = uv_thread_self();
03:05:40  <piscisaureus>uv_thread_id t2 = uv_thread_self();
03:05:44  <piscisaureus>assert(t1 === t2)
03:06:06  <piscisaureus>which currently isn't guaranteed to work
03:07:00  <trevnorris>hm. interesting.
03:07:19  <piscisaureus>so long story short ... it works but it's broken too
03:08:20  <piscisaureus>so I don't know... I think that we should make uv_thread_self return an uv_thread_t or scrap it altogether
03:09:01  <piscisaureus>and invent an uv_thread_id_t type and uv_thread_id() api for the purpose described above
03:09:06  <piscisaureus>I wrote it in c++ for mozilla
03:09:21  <trevnorris>hm. yeah. it's only used in one place in node. node_crypto in crypto_threadid_cb()
03:09:24  <trevnorris>really? cool
03:09:56  <Dirkson>piscisaureus: More or less got that working. Still have yet to see bidirectional udp :-/
03:10:32  <trevnorris>piscisaureus: ok. so is the "thread id" basically the tid that uv_thread_self is returning?
03:10:36  <piscisaureus>trevnorris: https://bug956899.bugzilla.mozilla.org/attachment.cgi?id=8362315
03:10:56  <piscisaureus>trevnorris: yes, but casting pthread_self() to a long is not the right way to get it
03:11:08  <piscisaureus>Dirkson: that doesn't exist. UDP is connection-less
03:12:15  <trevnorris>piscisaureus: yeah. i'm actually confused by the man page. the function is defined by: pthread_t pthread_self(void);
03:12:15  <trevnorris>but says "returns the ID of the calling thread"
03:12:29  <trevnorris>so how is pthread_t the id? I thought pthread_t was a struct
03:12:52  <piscisaureus>It could be - the spec doesn't say.
03:12:58  <piscisaureus>I think it's usually a void*
03:13:18  * kevinsimperjoined
03:13:22  <piscisaureus>trevnorris: http://man7.org/linux/man-pages/man3/pthread_self.3.html -- read the "notes" section
03:13:27  <trevnorris>ah, ok. it does say that it returns the same value as pthread_create(). which returns an int.
03:13:28  <trevnorris>ok
03:13:31  <Dirkson>piscisaureus: Bidirectional udp is commonly done, whether it officially exists or not? O.o I'm not sure how to reply to that.
03:14:30  <piscisaureus>Dirkson: of course you can send UDP in two directions
03:14:46  * kpdeckerquit (Quit: Leaving.)
03:14:49  <Dirkson> piscisaureus *grins* No, no I cannot! But that's just my problem.
03:15:06  <trevnorris>piscisaureus: from those notes, and your comment above, it seems there should be a uv_thread_equal()
03:15:57  * rmgquit (Remote host closed the connection)
03:15:57  <Dirkson>I should probably explain what I've been trying to do for the past few hours, rather than just be grouchy about it.
03:15:58  <piscisaureus>trevnorris: yes but that's just terrible :)
03:16:09  <piscisaureus>trevnorris: also hard to implement on windows I'm afraid.
03:16:27  <piscisaureus>trevnorris: well - the equal function is not hard to implement
03:16:45  <Dirkson>I've gotten a UDP packet to go from the client to the server, but not the reverse. As near as I understand, to do that I need to send the reply packet to the original's packet's source port. Actually getting that done, however, is proving Extremely challenging.
03:17:09  <piscisaureus>trevnorris: but in order to actually return a usable thread_t that you can pass to uv_thread_join, you'd need to get the HANDLE
03:17:20  <piscisaureus>but the thing with HANDLEs is that you need to close them
03:17:29  <piscisaureus>so then we'd have to add uv_thread_close() :/
03:17:40  <trevnorris>hehe. it's a rabbit hole.
03:17:59  * kevinsimperquit (Ping timeout: 255 seconds)
03:18:02  <trevnorris>does GetCurrentThreadId() have the same issue w/ == that you mentioned above?
03:18:17  <piscisaureus>Yes. So the moz patch that I linked above solved that by having a separate "identity" type and a separate "handle" type
03:18:31  <piscisaureus>where the handle type is what you can pass to pthread_join etc
03:18:42  <trevnorris>ah ok
03:18:49  <Dirkson>I'm honestly not sure what's going wrong right now. My router is noting the packets for port "56390" (My now hard-coded reply port) and manually forwarding them on (as a proof-of-concept), but wireshark doesn't see them... That's not a failure indicative of anything. Packets are getting dropped in the wire between my computer and my router??
03:19:14  <piscisaureus>trevnorris: and the "identity" type is guaranteed to uniquely identify a thread (and nonzero) so you can compare with ==
03:19:24  <piscisaureus>trevnorris: but if you have a better idea you're welcome :)
03:19:30  * rmgjoined
03:19:47  <trevnorris>hehe. dude, today is my first day trying to seriously use threads.
03:19:51  <piscisaureus>Dirkson: that could happen but seems unlikely. What OS is this?
03:20:24  * calvinfoquit (Quit: Leaving.)
03:20:42  <Dirkson>piscisaureus: The client and server are debian linux, running libuv 10.25, and the router is a microtick routeros thingie.
03:21:26  <Dirkson>If I'm honest, I'm not sure I need a huge amount of help with anything right now, other than a place to vent and maybe a sandwich. I'm fried out on the problem, but too stubborn to stop trying for a while.
03:21:44  <piscisaureus>Yeah I'm not aware of any issues with debian
03:21:49  <trevnorris>piscisaureus: i'm just experimenting, or at least trying to get to the point of being able to, of implementing a pull based API where the JS would run off the main uv_run() thread.
03:22:10  <piscisaureus>trevnorris: on another thread?
03:22:54  <trevnorris>yeah. figured if I"m going to learn how to use this stuff might as well start with something insane. :P
03:23:40  <trevnorris>basically the incoming events would be pushed to different queue's then going around the uv_run event loop it would notify the JS thread that there are events waiting to be handled
03:24:42  * c4milojoined
03:24:48  * AvianFluquit (Remote host closed the connection)
03:24:55  <trevnorris>i was thinking that it might be useful if there was any pre-processing that should be done, before handing it off to the JS thread. like http header parsing, for example.
03:25:56  <trevnorris>no idea if this is even possible, but guess I'll find out. :)
03:26:04  <piscisaureus>trevnorris: it certainly is possible
03:26:17  <piscisaureus>trevnorris: I'd go about it a bit differently but it's not bad if you play a little bit with it :)
03:26:35  <trevnorris>coolio. thanks for all the help, and for the link to the patch
03:26:54  <Dirkson>Ok. Is sockaddr_in->sin_port the source port or the destination port?
03:27:44  <piscisaureus>Dirkson: depends on which API you're using
03:27:57  <Dirkson>*confusion*
03:28:09  <piscisaureus>Dirkson: sockaddr_in is an IP+port combo
03:28:23  <piscisaureus>Dirkson: if you put the destination IP in there then you should also put the destination port
03:28:31  <Dirkson>Ah! Gotcha.
03:28:52  <Dirkson>piscisaureus: When uv_udp_send asks for a sockaddr_in then, is it asking for a destination port?
03:29:01  <piscisaureus>Dirkson: yes
03:29:10  <piscisaureus>Dirkson: if you put 0 in there it should send to a random port
03:29:12  <Dirkson>Awesome. I have a puzzler for you then.
03:29:36  * c4miloquit (Ping timeout: 255 seconds)
03:30:08  <trevnorris>piscisaureus: part of the idea was that this way even if the JS was blocking you could still SIGINT the process and receive it.
03:30:26  <Dirkson>piscisaureus: http://pastebin.com/aziHfpur - This code outputs this: Outgoing Port: 71.59.172.169 : 18140 . I expect it to output the port 56390 instead - Why doesn't it?
03:30:30  <piscisaureus>trevnorris: but who'd receive it
03:30:38  <piscisaureus>trevnorris: if js is running you'd interrupt it?
03:31:01  <trevnorris>piscisaureus: yeah. v8 has an api for that. so then if you have a bocking script you'd still be able to jump into the middle of it and debug
03:31:21  <piscisaureus>trevnorris: you could do the same by spinning up a separate event loop with only a sigint handler in it
03:31:27  <piscisaureus>(in a separate thread)
03:32:03  <piscisaureus>if that's all, there's an easy solution. Now there is something to say for cross-thread dispatch so I don't want to dis-encourage you to try this stuff.
03:32:39  <trevnorris>oh don't worry, you're not. :)
03:32:39  <trevnorris>when learning something new I like to jump in at the deep end.
03:33:02  * kpdeckerjoined
03:33:04  <piscisaureus>Dirkson: because of host vs machine byte ordering
03:33:31  <piscisaureus>Dirkson: you have to ntohs() the port number
03:33:42  <Dirkson>piscisaureus: When where?
03:33:58  <piscisaureus>sin_port is in network byte ordering, so it's not the port
03:34:05  <piscisaureus>it's the port with the bytes reversed
03:34:11  <piscisaureus>er, in reverse order
03:34:51  <piscisaureus>Dirkson: you need to do this in reverse: https://github.com/joyent/libuv/blob/master/src/uv-common.c#L104
03:35:21  <Dirkson>piscisaureus: One mystery solved, another crops up. Thank you.
03:35:53  * kpdecker1joined
03:36:19  <Dirkson>piscisaureus: Oh. OH. Whenever I fuddle with the port number. No wonder nothing worked.
03:36:51  <trevnorris>piscisaureus: c question. are static variables inside functions thread safe?
03:37:06  <trevnorris>google is failing me
03:37:14  <Dirkson>piscisaureus: Does uv_udp_bind and other uv functions expect me to adjust byte order?
03:37:20  * kpdeckerquit (Ping timeout: 255 seconds)
03:40:46  <piscisaureus>Dirkson: well - you have to pass in a valid sockaddr_in which is supposed to have those values in network byte order
03:41:17  <piscisaureus>Dirkson: if you create a sockaddr_in with uv_ipv4_addr that is done for you but if you populate the struct yourself you have to do it yourself
03:48:45  <Dirkson>piscisaureus: Thanks for the help.
03:52:03  * brunklejoined
03:52:56  <piscisaureus>Dirkson: you're welcome, good luck
03:57:21  * piscisaureusquit (Ping timeout: 252 seconds)
04:20:20  * euoiajoined
04:20:49  * calvinfojoined
04:21:42  * calvinfo1joined
04:21:42  * calvinfoquit (Read error: Connection reset by peer)
04:22:35  * calvinfojoined
04:22:35  * calvinfo1quit (Read error: Connection reset by peer)
04:23:30  * calvinfo1joined
04:23:31  * calvinfoquit (Read error: Connection reset by peer)
04:24:25  * calvinfojoined
04:24:25  * calvinfo1quit (Read error: Connection reset by peer)
04:25:18  * calvinfo1joined
04:25:18  * calvinfoquit (Read error: Connection reset by peer)
04:25:50  * c4milojoined
04:29:35  * rmgquit (Remote host closed the connection)
04:29:59  * calvinfo1quit (Ping timeout: 255 seconds)
04:30:53  * c4miloquit (Ping timeout: 255 seconds)
04:39:31  * calvinfojoined
04:41:59  <MI6>joyent/node: Fedor Indutny v0.10 * d6fd118 : deps: update openssl to 1.0.1g - http://git.io/oi6C4w
04:45:27  <indutny>ok, let's do a v0.11
04:51:43  * benvie_joined
04:51:45  <guybrush>hey indutny bud is really cool! i wonder if it would be easy to support http-proxying too? or just use node for http-balancing?
04:51:52  * mogillquit (Quit: mogill)
04:52:04  <indutny>guybrush: hey man
04:52:07  <indutny>I was thinking about it
04:52:36  <indutny>but then I thought that SNI should be enough
04:52:39  <indutny>what's your use case?
04:52:41  <guybrush>the sni-feature is really nice and in general i fell in love with bud lol
04:52:47  <indutny>great! :)
04:52:56  <indutny>thank you
04:53:35  * seldoquit (Remote host closed the connection)
04:54:08  * benviequit (Ping timeout: 240 seconds)
04:54:42  * seldojoined
04:55:46  * paulfryzelquit (Remote host closed the connection)
04:56:53  * paulfryz_joined
04:56:56  <guybrush>well im really a noob with all these things, but i dont see how i can use bud to point browsers to the https
04:57:23  <indutny>hm... I think you need an http server running as a backend
04:57:29  <guybrush>right now i am setting the Strinct-Transport-Security header, but that only works after the first time
04:57:39  <guybrush>*Strict
04:58:20  <guybrush>so basically with bud i can du HTTPS->HTTP, but i cant do HTTP->HTTP right?
04:58:26  <guybrush>*do
04:58:43  <indutny>yep
04:59:19  <indutny>there are other, more powerful tools for it
04:59:19  <indutny>:)
04:59:36  <guybrush>kk ty for the chat :D
04:59:53  <indutny>np, you are welcome
04:59:57  <indutny>btw
05:00:00  <indutny>there is #bud-tls channel
05:00:24  <guybrush>oh sweet, will idle and shoot there if i run into some issues
05:00:45  <indutny>great!
05:01:19  * paulfryz_quit (Ping timeout: 246 seconds)
05:01:43  <MI6>joyent/node: Alexis Campailla master * c20b209 : openssl: fix keypress requirement in apps on win32 (+8 more commits) - http://git.io/1tBzVA
05:03:41  * calvinfoquit (Quit: Leaving.)
05:04:38  * euoiaquit (Ping timeout: 240 seconds)
05:08:23  * calvinfojoined
05:14:13  * kevinsimperjoined
05:14:49  * seldoquit (Remote host closed the connection)
05:17:00  * seldojoined
05:18:57  * kevinsimperquit (Ping timeout: 255 seconds)
05:18:57  * seldoquit (Remote host closed the connection)
05:20:43  * TooTallNatejoined
05:22:41  * seldojoined
05:26:52  * c4milojoined
05:27:48  * rmgjoined
05:31:08  * seldoquit (Remote host closed the connection)
05:31:25  * c4miloquit (Ping timeout: 246 seconds)
05:31:32  * calvinfoquit (Quit: Leaving.)
05:46:52  * TooTallNatequit (Quit: Computer has gone to sleep.)
05:47:36  * seldojoined
05:52:40  * seldoquit (Remote host closed the connection)
05:56:37  * paulfryzeljoined
06:01:08  * paulfryzelquit (Ping timeout: 240 seconds)
06:03:22  * calvinfojoined
06:08:53  * bradleymeck_joined
06:09:04  <trevnorris>indutny: wtf is up with deps/openssl/openssl/Makefile.bak ?
06:09:11  <indutny>that's from upstream
06:09:26  <trevnorris>figured, but still. that and a Makefile.save
06:09:30  <trevnorris>wtf are they thinking?
06:09:35  <trevnorris>isn't that the point of revision control?
06:09:36  <indutny>haha
06:09:38  * bradleymeckquit (Ping timeout: 240 seconds)
06:09:38  * bradleymeck_changed nick to bradleymeck
06:09:40  <indutny>perhaps
06:09:42  <indutny>:)
06:10:27  <trevnorris>and like every subdir in deps/openssl also has a Makefile.bak and Makefile.save
06:10:59  <trevnorris>ok. so only 1 .bak
06:11:11  <trevnorris>but there are 57 Makefile.save
06:11:12  <trevnorris>oy
06:15:01  * bajtosjoined
06:17:33  * seldojoined
06:18:45  * janjongboomjoined
06:18:47  <indutny>:)
06:18:59  <indutny>trevnorris: working on a test for heartbeat CVE
06:19:13  <indutny>it is quite interesting to see, how much data I could actually extract
06:21:43  <trevnorris>interesting
06:22:10  <trevnorris>i'm trying to wrap my head around handling multiple threads and signaling between them.
06:26:26  <indutny>heh
06:26:32  <indutny>rather interesting too
06:26:34  <indutny>I suppose
06:28:06  <trevnorris>hey, for this being my first day ever trying to seriously work with threads it's a little mind bending
06:29:07  <indutny>not joking, actually
06:29:10  <indutny>and that wasn't sarcasm
06:29:26  <indutny>sorry, if that sound otherwise
06:29:27  <indutny>:)
06:30:50  <trevnorris>heh, no worries.
06:31:04  <trevnorris>when did the use of uv__ for internal functions start?
06:31:15  <trevnorris>src/win/internal.h is all over the place
06:31:28  * sinclair|workjoined
06:33:48  <indutny>I think it is quite old C tradition
06:34:44  <trevnorris>ok. just curious. maybe at one time some of those weren't internal. was just looking at uv_translate_sys_error
06:35:05  <trevnorris>since I was examining how uv_thread_join works
06:36:33  * karupaneruraquit (Quit: ZNC - http://znc.in)
06:39:10  <trevnorris>indutny: so, I think I get how to use uv_async and uv_work to create handles and send work to the uv thread pool.
06:39:11  <trevnorris>i might be off my rocker, but is there a generic way to create a thread and have it chill in the background and wait for a signal from the main thread?
06:40:23  * janjongboomquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:40:25  <indutny>you need a semaphore
06:40:47  <indutny>but if you meant just one API method
06:40:49  <indutny>then answer is no
06:41:32  <trevnorris>cool thanks
06:44:59  * zz_karupanerurajoined
06:46:03  <trevnorris>indutny: mind running ./run-benchmarks tcp_multi_accept2
06:46:10  <trevnorris>and tell me if it works for you?
06:47:02  <indutny>perhaps a bit later
06:47:08  * zz_karupanerurachanged nick to karupanerura
06:47:10  <indutny>in the middle of different thing right now
06:47:11  <indutny>sorry
06:47:39  <trevnorris>no worries
06:47:45  <trevnorris>i'm just getting:
06:47:45  <trevnorris>Assertion failed in ../test/benchmark-multi-accept.c on line 354: 0 == uv_tcp_connect(&ctx->connect_req, (uv_tcp_t*) &ctx->client_handle, (const struct sockaddr*) &listen_addr, cl_connect_cb)
06:47:52  <trevnorris>and not sure if it's something i'm doing wrong
06:49:21  <indutny>it might be broken
06:51:24  <indutny>oh god
06:51:25  <indutny>it works
06:51:28  <indutny>the heartbeat leak
06:51:36  <trevnorris>hehe
06:52:04  * karupaneruraquit (Quit: ZNC - http://znc.in)
06:52:30  * seldoquit (Remote host closed the connection)
06:52:35  * karupanerurajoined
06:53:28  * m76joined
06:53:51  * bradleymeckquit (Quit: bradleymeck)
06:55:17  * c4milojoined
06:56:34  <trevnorris>indutny: oh, hah. it's failing because of EADDRNOTAVAIL
06:56:41  <indutny>ah
06:56:44  <indutny>I see
06:57:05  * m76quit (Client Quit)
06:57:22  * m76joined
06:57:24  * paulfryzeljoined
06:58:30  * brunklequit (Quit: brunkle)
06:58:31  * calvinfoquit (Read error: Connection reset by peer)
06:58:37  * calvinfo1joined
06:59:35  * kpdecker1part
07:00:16  * c4milo_joined
07:00:33  * c4miloquit (Ping timeout: 240 seconds)
07:01:38  * paulfryzelquit (Ping timeout: 240 seconds)
07:05:25  * kevinsimperjoined
07:06:41  <indutny>so the question
07:06:47  <indutny>is how to identify private keys in memory
07:08:03  * calvinfojoined
07:08:03  * calvinfo1quit (Read error: Connection reset by peer)
07:09:09  * yunong__joined
07:10:49  * yunong_quit (Ping timeout: 246 seconds)
07:13:50  * yunong__quit (Ping timeout: 252 seconds)
07:14:26  * yunongjoined
07:18:01  * janjongboomjoined
07:21:02  * yunong_joined
07:21:56  * yunong__joined
07:23:33  * yunongquit (Ping timeout: 240 seconds)
07:24:18  * einarosjoined
07:25:08  * yunong_quit (Ping timeout: 240 seconds)
07:29:27  * calvinfoquit (Quit: Leaving.)
07:36:07  * einarospart
07:42:25  * janjongboomquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:42:44  * kazuponquit (Read error: Connection timed out)
07:44:02  * kazuponjoined
07:44:06  * janjongboomjoined
07:46:27  * janjongboomquit (Client Quit)
07:49:41  * inolenquit (Quit: Leaving.)
07:50:33  * inolenjoined
07:59:17  * paulfryz_joined
08:03:19  * paulfryz_quit (Ping timeout: 246 seconds)
08:13:06  * inolenquit (Quit: Leaving.)
08:13:31  * inolenjoined
08:21:27  * cosnis_joined
08:21:39  * cosnisquit (Read error: Connection reset by peer)
08:22:14  * cosnisjoined
08:22:19  * cosnisquit (Max SendQ exceeded)
08:22:59  * cosnisjoined
08:26:09  * cosnis_quit (Ping timeout: 255 seconds)
08:30:36  * inolenquit (Quit: Leaving.)
08:32:45  * rmgquit (Remote host closed the connection)
08:33:53  * rmgjoined
08:36:44  * hzjoined
08:38:33  * rmgquit (Ping timeout: 252 seconds)
08:46:48  * inolenjoined
08:48:14  * inolenquit (Client Quit)
08:53:45  * petka_joined
08:59:05  * paulfryzeljoined
09:00:00  * paulfryz_joined
09:00:12  * c4milo_quit (Remote host closed the connection)
09:03:30  * paulfryzelquit (Ping timeout: 255 seconds)
09:04:13  * paulfryz_quit (Ping timeout: 246 seconds)
09:04:44  * stephankjoined
09:06:59  * bajtosquit (Quit: bajtos)
09:07:36  * hz_joined
09:07:41  * hzquit (Disconnected by services)
09:07:42  * hz_changed nick to hz
09:08:40  * daviddiasjoined
09:10:03  * inolenjoined
09:10:42  * inolenquit (Client Quit)
09:10:58  * inolenjoined
09:29:58  * janjongboomjoined
09:39:00  * daviddiasquit (*.net *.split)
09:39:00  * petka_quit (*.net *.split)
09:39:01  * ircretaryquit (*.net *.split)
09:39:02  * MI6quit (*.net *.split)
09:39:02  * brett19quit (*.net *.split)
09:39:03  * wolfeidauquit (*.net *.split)
09:39:03  * dsantiagoquit (*.net *.split)
09:39:03  * burlakquit (*.net *.split)
09:39:04  * SquirrelCZECH_quit (*.net *.split)
09:39:05  * eugenewarequit (*.net *.split)
09:39:05  * saapasquit (*.net *.split)
09:39:07  * `3rdEdenquit (*.net *.split)
09:39:08  * creationixquit (*.net *.split)
09:39:08  * saapasjoined
09:39:21  * eugenewarejoined
09:39:25  * eugenewarequit (Changing host)
09:39:25  * eugenewarejoined
09:39:28  * daviddiasjoined
09:39:42  * burlakjoined
09:39:48  * trevnorrisquit (*.net *.split)
09:39:49  * hueniversequit (*.net *.split)
09:39:49  * emeryquit (*.net *.split)
09:39:50  * skebcioquit (*.net *.split)
09:39:51  * wolfeidaujoined
09:39:56  * LOUDBOTquit (*.net *.split)
09:39:56  * CAPSLOCKBOT_quit (*.net *.split)
09:39:56  * lars2893quit (*.net *.split)
09:39:59  * vigithquit (*.net *.split)
09:39:59  * rvaggquit (*.net *.split)
09:39:59  * chrisdickinsonquit (*.net *.split)
09:40:00  * Raynosquit (*.net *.split)
09:40:00  * benoitcquit (*.net *.split)
09:40:07  * chrisdickinson_joined
09:40:08  * dsantiagojoined
09:40:09  * creationixjoined
09:40:14  * lars2893joined
09:40:24  * SquirrelCZECHjoined
09:40:25  * hueniversejoined
09:40:26  * trevnorrisjoined
09:40:26  * benoitcjoined
09:40:45  * `3rdEdenjoined
09:40:47  * petka_joined
09:41:09  * `3rdEdenchanged nick to Guest99463
09:41:17  * benoitcquit (*.net *.split)
09:41:17  * wolfeidauquit (*.net *.split)
09:41:21  * jirwinquit (*.net *.split)
09:41:32  * Raynosjoined
09:41:41  * edwin_liuquit (Ping timeout: 246 seconds)
09:41:46  * benoitcjoined
09:42:05  * wolfeidaujoined
09:42:13  * sinclair|workquit (*.net *.split)
09:42:13  * benvie_quit (*.net *.split)
09:42:13  * AlexisMochaquit (*.net *.split)
09:42:14  * niskaquit (*.net *.split)
09:42:17  * kenperkins_quit (*.net *.split)
09:42:18  * WalrusPony1quit (*.net *.split)
09:42:19  * jxsquit (*.net *.split)
09:42:20  * tellnesquit (*.net *.split)
09:43:16  * jxsjoined
09:43:21  * benviejoined
09:44:05  * karupanerurachanged nick to zz_karupanerura
09:44:17  * ircretaryjoined
09:44:17  * MI6joined
09:44:32  * brett19joined
09:44:43  * jirwinjoined
09:45:36  * niskajoined
09:46:12  * vigithjoined
09:46:40  * kenperkinsjoined
09:48:56  * AlexisMochajoined
09:49:07  * rvaggjoined
09:49:52  * benviequit (Read error: Connection reset by peer)
09:50:51  * edwin_liujoined
09:50:53  * benviejoined
09:51:08  * janjongboomquit (Ping timeout: 246 seconds)
09:51:11  * WalrusPonyjoined
09:52:44  * janjongboomjoined
09:52:59  * skebciojoined
09:53:23  * cosnisquit (Ping timeout: 253 seconds)
09:54:10  * tellnesjoined
09:54:46  * CAPSLOCKBOTjoined
09:54:50  * LOUDBOTjoined
09:55:01  * benvie_joined
09:55:14  * cosnisjoined
09:55:28  * cosnisquit (Max SendQ exceeded)
09:56:12  * cosnisjoined
09:56:16  * cosnisquit (Max SendQ exceeded)
09:56:34  * lars2893quit (Changing host)
09:56:34  * lars2893joined
09:56:48  * Raynosquit (Changing host)
09:56:48  * Raynosjoined
09:56:49  * Guest99463quit (Changing host)
09:56:49  * Guest99463joined
09:56:49  * petka_quit (Changing host)
09:56:50  * petka_joined
09:57:52  * cosnisjoined
09:57:59  * cosnisquit (Max SendQ exceeded)
09:58:20  * benviequit (Ping timeout: 255 seconds)
09:59:00  * daviddiasquit (Remote host closed the connection)
09:59:26  * daviddiasjoined
09:59:50  * paulfryzeljoined
10:00:52  * paulfryz_joined
10:01:50  * daviddiasquit (Read error: No route to host)
10:02:52  * Guest99463changed nick to `3E
10:03:28  * wolfeidauquit (*.net *.split)
10:03:28  * benoitcquit (*.net *.split)
10:03:28  * petka_quit (*.net *.split)
10:03:28  * lars2893quit (*.net *.split)
10:03:30  * eugenewarequit (*.net *.split)
10:03:30  * rjequit (*.net *.split)
10:03:31  * andrewrkquit (*.net *.split)
10:03:31  * rphillipsquit (*.net *.split)
10:03:32  * Orbordequit (*.net *.split)
10:03:32  * rchquit (*.net *.split)
10:03:32  * robertkowalskiquit (*.net *.split)
10:03:32  * tumdedumquit (*.net *.split)
10:03:33  * nifocquit (*.net *.split)
10:03:33  * othiym23quit (*.net *.split)
10:03:36  * robertkowalskijoined
10:03:44  * robertkowalskiquit (Changing host)
10:03:44  * robertkowalskijoined
10:03:45  * andrewrkjoined
10:03:46  * othiym23joined
10:03:56  * wolfeidaujoined
10:03:56  * paulfryzelquit (Read error: Operation timed out)
10:03:59  * eugenewarejoined
10:04:20  * benoitcjoined
10:04:24  * Orbordejoined
10:04:33  * petka_joined
10:04:34  * lars2893joined
10:04:35  * rchjoined
10:04:35  * cosnisjoined
10:05:07  * paulfryz_quit (Ping timeout: 246 seconds)
10:08:44  * tumdedumjoined
10:13:01  * wolfeidauquit (Read error: Network is unreachable)
10:13:13  * eugenewarequit (Read error: Connection reset by peer)
10:13:15  * benviejoined
10:13:34  * benvie_quit (Ping timeout: 240 seconds)
10:13:37  * eugenewarejoined
10:13:49  * wolfeidaujoined
10:15:18  * jirwinquit (Ping timeout: 264 seconds)
10:16:16  * sinclair|workjoined
10:25:17  * Kakerajoined
10:26:40  * zz_karupaneruraquit (*.net *.split)
10:26:43  * jxsquit (*.net *.split)
10:26:45  * Raynosquit (*.net *.split)
10:26:46  * SquirrelCZECHquit (*.net *.split)
10:26:46  * trevnorrisquit (*.net *.split)
10:26:46  * dsantiagoquit (*.net *.split)
10:26:46  * inolenquit (*.net *.split)
10:26:46  * kazuponquit (*.net *.split)
10:26:47  * yunong__quit (*.net *.split)
10:26:47  * LeftWingquit (*.net *.split)
10:26:47  * tdmackey_quit (*.net *.split)
10:26:48  * saghulquit (*.net *.split)
10:26:48  * kkaeferquit (*.net *.split)
10:26:48  * nsmquit (*.net *.split)
10:26:49  * juliangruberquit (*.net *.split)
10:26:49  * chummmquit (*.net *.split)
10:26:49  * ryahquit (*.net *.split)
10:26:49  * Domenic_quit (*.net *.split)
10:26:49  * Dirksonquit (*.net *.split)
10:27:01  * chummmjoined
10:27:05  * kkaeferjoined
10:27:05  * kkaeferquit (Changing host)
10:27:05  * kkaeferjoined
10:27:18  * benvie_joined
10:27:18  * benviequit (Ping timeout: 252 seconds)
10:27:22  * tdmackeyjoined
10:27:22  * ryahjoined
10:27:26  * inolenjoined
10:27:27  * dsantiagojoined
10:27:30  * nsmjoined
10:27:34  * trevnorrisjoined
10:27:44  * yunongjoined
10:27:49  * jxsjoined
10:28:20  * saghuljoined
10:28:29  * kazuponjoined
10:28:42  * Raynosjoined
10:29:05  * juliangruberjoined
10:29:33  * edwin_liuquit (Ping timeout: 240 seconds)
10:29:36  * Domenic___joined
10:29:54  * zz_karupanerurajoined
10:30:07  * SquirrelCZECHjoined
10:30:14  * `3Equit (Ping timeout: 248 seconds)
10:30:14  * creationixquit (Ping timeout: 248 seconds)
10:30:35  * Guest99463joined
10:31:02  * creationixjoined
10:31:08  * zz_karupanerurachanged nick to karupanerura
10:32:47  * benviejoined
10:33:01  * LeftWingjoined
10:33:34  * Dirksonjoined
10:33:54  * benvie_quit (Ping timeout: 240 seconds)
10:34:28  * edwin_liujoined
10:37:00  * bajtosjoined
10:39:41  * rchquit (*.net *.split)
10:39:41  * AlexisMochaquit (*.net *.split)
10:39:42  * hueniversequit (*.net *.split)
10:39:43  * kaesoquit (*.net *.split)
10:40:07  * kaesojoined
10:40:29  * hueniversejoined
10:40:47  * rchjoined
10:41:56  * AlexisMochajoined
10:42:59  * emeryjoined
10:53:41  * cosnis_joined
10:54:23  * cosnis_quit (Read error: Connection reset by peer)
10:54:41  * cosnis_joined
10:54:46  * cosnis_quit (Max SendQ exceeded)
10:55:24  * cosnis_joined
10:55:40  * cosnis_quit (Max SendQ exceeded)
10:56:23  * cosnis_joined
10:56:23  * cosnisquit (Ping timeout: 255 seconds)
11:01:25  * stagasjoined
11:01:32  * paulfryz_joined
11:01:44  * nifocjoined
11:02:23  * paulfry__joined
11:06:07  * paulfryz_quit (Ping timeout: 265 seconds)
11:06:34  * paulfry__quit (Ping timeout: 240 seconds)
11:07:12  * cosnis_quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
11:33:54  * AlexisMochaquit (Ping timeout: 240 seconds)
11:34:17  * AlexisMochajoined
11:45:29  * edwin_liuquit (Remote host closed the connection)
11:45:52  * benvie_joined
11:47:54  * benviequit (Ping timeout: 240 seconds)
11:51:17  * jirwinjoined
12:02:15  * paulfryzeljoined
12:03:01  * paulfryz_joined
12:06:41  * paulfryzelquit (Ping timeout: 246 seconds)
12:07:14  * paulfryz_quit (Ping timeout: 240 seconds)
12:07:34  * janjongboomquit (Ping timeout: 240 seconds)
12:08:47  * janjongboomjoined
12:09:11  * kazuponquit (Remote host closed the connection)
12:10:25  * kaesoquit (Quit: ZNC - http://znc.sourceforge.net)
12:10:47  * kaesojoined
12:12:12  * kaesoquit (Changing host)
12:12:12  * kaesojoined
12:13:24  * yunong_joined
12:16:20  * Guest99463quit (Ping timeout: 252 seconds)
12:16:29  * yunongquit (Ping timeout: 264 seconds)
12:17:02  * wolfeidauquit (Read error: Network is unreachable)
12:17:03  * benoitcquit (Read error: Connection reset by peer)
12:17:04  * nifocquit (Ping timeout: 252 seconds)
12:17:04  * creationixquit (Ping timeout: 252 seconds)
12:17:04  * Domenic___quit (Read error: Connection reset by peer)
12:17:04  * Raynosquit (Read error: Network is unreachable)
12:17:47  * Domenic___joined
12:17:48  * Guest99463joined
12:17:51  * wolfeidaujoined
12:18:31  * jirwinquit (Ping timeout: 252 seconds)
12:18:44  * Raynosjoined
12:18:56  * m76quit (Ping timeout: 252 seconds)
12:19:03  * benoitcjoined
12:19:56  * m76joined
12:21:15  * rphillips_joined
12:21:24  * jirwinjoined
12:22:37  * creationixjoined
12:22:40  * bajtosquit (Quit: bajtos)
12:23:13  * bajtosjoined
12:26:16  * yunongjoined
12:27:43  * bajtosquit (Ping timeout: 240 seconds)
12:28:34  * yunong_quit (Ping timeout: 240 seconds)
12:42:49  * daviddiasjoined
12:43:00  * cosnisjoined
12:49:47  * cosnisquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
12:51:30  * bradleymeckjoined
12:57:21  * nifocjoined
12:58:00  * bajtosjoined
13:01:14  * paulfryzeljoined
13:01:37  * bradleymeckquit (Quit: bradleymeck)
13:03:03  * paulfryz_joined
13:05:00  * sinclair|workquit (Quit: ChatZilla 0.9.90.1 [Firefox 28.0/20140314220517])
13:06:19  * AvianFlujoined
13:07:14  * paulfryz_quit (Ping timeout: 246 seconds)
13:09:26  * mikolalysenkojoined
13:16:46  * thlorenzjoined
13:18:59  * yunong_joined
13:21:56  * yunongquit (Ping timeout: 265 seconds)
13:23:14  * m76quit (Ping timeout: 240 seconds)
13:29:26  * AvianFluquit (Remote host closed the connection)
13:38:48  * mikealquit (Quit: Leaving.)
13:41:45  * kazuponjoined
13:44:00  * mikealjoined
13:44:58  * thlorenzquit (Remote host closed the connection)
13:46:35  * ktosiujoined
13:48:53  * paulfryzelquit (Remote host closed the connection)
13:52:01  * calvinfojoined
13:54:06  * rphillips_quit
13:54:21  * rphillips_joined
13:57:15  * mikealquit (Quit: Leaving.)
14:00:37  * yunongjoined
14:01:13  * bradleymeckjoined
14:03:14  * yunong_quit (Ping timeout: 240 seconds)
14:05:34  * mikolalysenkoquit (Ping timeout: 240 seconds)
14:06:20  * yunong_joined
14:07:05  * mikolalysenkojoined
14:08:46  <swaj>So node.js v0.10.x bundles a version of OpenSSL that is affected by heartbleed
14:08:50  * yunongquit (Ping timeout: 246 seconds)
14:11:02  <swaj>and actually so does node 0.11.x
14:11:08  * bradleymeckquit (Quit: bradleymeck)
14:14:39  <saghul>swaj: heartbeat was disabled since 0.10.2
14:15:25  <swaj>I just saw in the gyp file :P
14:16:17  * yunongjoined
14:17:07  * thlorenzjoined
14:18:53  * yunong_quit (Ping timeout: 255 seconds)
14:19:38  * bradleymeckjoined
14:22:25  * m76joined
14:29:36  * mikealjoined
14:29:40  * mikealquit (Client Quit)
14:29:54  * m76quit (Read error: Connection reset by peer)
14:31:48  * bradleymeckquit (Quit: bradleymeck)
14:32:34  * mikealjoined
14:39:08  * yunong_joined
14:42:10  * yunongquit (Ping timeout: 265 seconds)
14:43:57  * paulfryzeljoined
14:45:05  * chrisdickinson_quit (*.net *.split)
14:45:06  * kevinsimperquit (*.net *.split)
14:45:06  * jordan1quit (*.net *.split)
14:46:28  * kevinsimperjoined
14:47:04  * jordan1joined
14:47:35  <tjfontaine>swaj: you should follow @nodejs ;) I tweeted it yesterday
14:48:22  <tjfontaine>indutny: ping
14:49:40  * bajtosquit (Quit: bajtos)
14:49:44  * AvianFlujoined
14:50:01  * Guest99463changed nick to `3E
14:50:32  * chrisdickinsonjoined
14:52:06  <tjfontaine>morning chrisdickinson
14:54:31  * kazuponquit (Remote host closed the connection)
14:54:55  <Domenic___>There is no backpressure mechanism for UDP, right?
14:55:47  * daviddiasquit (Remote host closed the connection)
14:55:58  <tjfontaine>that depends on what you mean
14:56:27  * daviddiasjoined
14:56:30  <tjfontaine>you don't have to call recv() in your code until you're ready -- which leaves it in the kernel -- so effectively your code is leaving the buffer work to the kernel
14:56:45  <tjfontaine>but that is not communicated back to the sender
15:00:31  * daviddiasquit (Ping timeout: 240 seconds)
15:00:36  <Domenic___>ah ok
15:01:57  <Domenic___>are there benefits to leaving it in the kernel buffer vs. user-space buffer?
15:02:28  <tjfontaine>fewer copy outs until it's absolutely necessary
15:03:54  <ktosiu>/quit
15:04:09  * ktosiuquit (Quit: Lost terminal)
15:04:49  * kevinsimperquit (Remote host closed the connection)
15:05:35  <Domenic___>that makes sense. thanks.
15:24:42  * kazuponjoined
15:26:05  * brunklejoined
15:26:33  * kevinsimperjoined
15:39:28  * calvinfoquit (Quit: Leaving.)
15:40:55  * mogilljoined
15:42:02  * rjejoined
15:42:59  * yunongjoined
15:44:02  * janjongboomquit (Ping timeout: 265 seconds)
15:44:41  * calvinfojoined
15:44:48  * janjongboomjoined
15:45:26  * yunong_quit (Ping timeout: 246 seconds)
15:46:35  * yunong_joined
15:49:06  * yunongquit (Ping timeout: 240 seconds)
15:53:12  * bajtosjoined
15:54:20  <tjfontaine>isaacs: wtf generates changelog.html :P
15:54:42  <tjfontaine>ah I see
16:00:22  * calvinfoquit (Quit: Leaving.)
16:03:32  * mogillquit (Quit: mogill)
16:07:59  * mikealquit (Quit: Leaving.)
16:08:08  <MI6>joyent/node: Timothy J Fontaine v0.10 * af69f88 : build: make sure changelog.html is generated - http://git.io/JKJyzA
16:11:31  * mikealjoined
16:12:46  * daviddiasjoined
16:17:01  * paulfryzelquit (Read error: Connection reset by peer)
16:17:31  * m76joined
16:17:42  * paulfryzeljoined
16:21:16  * brunklequit (Quit: brunkle)
16:24:28  <chrisdickinson>morning tjfontaine
16:27:13  * yunongjoined
16:28:29  * calvinfojoined
16:29:43  * yunong_quit (Ping timeout: 240 seconds)
16:30:35  * Qardjoined
16:33:18  * jirwinquit (Changing host)
16:33:18  * jirwinjoined
16:45:11  * benvie_quit (Remote host closed the connection)
16:45:30  * benviejoined
16:54:13  * kenperkinsquit (Remote host closed the connection)
16:55:16  * m76quit (Read error: Connection reset by peer)
16:56:32  * kenperkinsjoined
16:59:59  * kenperkinsquit (Remote host closed the connection)
17:00:37  * kenperkinsjoined
17:02:17  * janjongboomquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:02:41  * seldojoined
17:03:07  * seldo_joined
17:03:10  * bradleymeckjoined
17:03:45  * TooTallNatejoined
17:03:49  * TooTallNatequit (Read error: Connection reset by peer)
17:06:55  * seldoquit (Ping timeout: 240 seconds)
17:09:10  * rosskjoined
17:11:49  * guybrushquit (Excess Flood)
17:12:02  * guybrushjoined
17:12:59  * hzquit (Ping timeout: 260 seconds)
17:19:50  * janjongboomjoined
17:21:15  * thlorenzquit (Remote host closed the connection)
17:21:47  * thlorenzjoined
17:21:51  * kazuponquit (Remote host closed the connection)
17:24:07  * janjongboomquit (Ping timeout: 240 seconds)
17:25:58  * thlorenzquit (Ping timeout: 240 seconds)
17:30:18  * m76joined
17:33:42  * TooTallNatejoined
17:33:51  * thlorenzjoined
17:33:56  * bradleymeckquit (Quit: bradleymeck)
17:36:36  * janjongboomjoined
17:36:56  * dap_joined
17:46:26  * rmgjoined
17:51:28  * bradleymeckjoined
17:54:42  * sblomjoined
17:55:39  * sblomquit (Read error: Connection reset by peer)
18:02:19  * sblomjoined
18:05:39  * kenperkinsquit (Read error: Connection reset by peer)
18:06:05  * sblomquit (Read error: Connection reset by peer)
18:06:15  * sblomjoined
18:06:17  * kenperkinsjoined
18:16:17  * mikolalysenkoquit (Ping timeout: 265 seconds)
18:22:34  * kazuponjoined
18:26:31  * kazuponquit (Ping timeout: 240 seconds)
18:36:13  * bradleymeck_joined
18:36:22  * bajtosquit (Quit: bajtos)
18:39:06  * bradleymeckquit (Ping timeout: 240 seconds)
18:42:07  * mikolalysenkojoined
18:43:39  * brsonjoined
18:45:52  <Dirkson>Is there any way to tell if I'm on a host with ipv6 support, other than "try to send ipv6 packet, record if it fails"?
18:46:32  <bradleymeck_>you could use the OS calls or check config. but it is not built in
18:47:05  * mikolalysenkoquit (Ping timeout: 250 seconds)
18:49:01  * bradleymeckjoined
18:49:54  * bradleymeck__joined
18:50:32  * thlorenzquit (Remote host closed the connection)
18:52:25  <bradleymeck__>https://gist.github.com/bmeck/0deeefd070224c10566f , need to flesh it out more but a decent start to speccing out the archive loader
18:55:10  * bradleymeck__quit (Quit: bradleymeck__)
18:56:23  * bradleymeck_quit (Quit: Bye)
18:58:54  <Dirkson>bradleymeck: Well, OS support only determines whether the machine supports ipv6, right? Not whether we have access to the ipv6 net.
18:59:11  <bradleymeck>Dirkson: correct, but you can’t query that generally
18:59:31  <tjfontaine>finding out if a path is routable is different from finding out if your environment has ipv6 enabled -- but that's also true of ipv4
18:59:55  <tjfontaine>brb
19:00:04  <Dirkson>bradleymeck: tjfontaine: Gotcha. So it's probably best to attempt an ipv6 packet on the first run of my program, then store the successful/unsuccessful result to determine which ipversion to use in the future?
19:01:50  * bradleymeckponders if OS DNS only returns ips in supported versions
19:02:05  <bradleymeck>well s/DNS/networking interfaces/
19:02:27  * mikealquit (Quit: Leaving.)
19:02:35  <Dirkson>Hmm. There's a question, too. If the /machine/ doesn't have ipv6 support, when will my networking setup/use fail? When I try to bind the ipv6 address? Or when I try to send an ipv6 packet?
19:08:14  * mikealjoined
19:15:17  * thlorenzjoined
19:15:23  * mikealquit (Quit: Leaving.)
19:20:30  * calvinfoquit (Quit: Leaving.)
19:22:37  * kazuponjoined
19:26:16  * hz_joined
19:26:22  * hz_changed nick to hz
19:27:19  * kazuponquit (Ping timeout: 240 seconds)
19:37:44  * kazuponjoined
19:42:18  * kazuponquit (Ping timeout: 240 seconds)
19:42:57  * mikolalysenkojoined
19:47:45  * mikolalysenkoquit (Ping timeout: 250 seconds)
20:00:01  * c4milojoined
20:03:52  <groundwater>bradleymeck: can i bundle compiled code for multiple platforms into a single bundle?
20:04:22  <bradleymeck>groundwater: mmm no that would require some work to support fat bundles
20:04:46  <groundwater>bradleymeck: okay, i just wanted to clarify
20:04:48  <bradleymeck>it would be possible but even then you would still need to keep separate node binaries for each platform to bootstrap the bundles
20:05:55  <groundwater>bradleymeck: no readResource async method?
20:06:28  <groundwater>bradleymeck: i should lead with "i really like this"
20:06:37  <bradleymeck>groundwater: no point to it since in-memory files are intended to be loaded sync for the require
20:07:12  <bradleymeck>if you are loading application assets async I would recommend using createReadStream
20:07:41  * mogilljoined
20:07:45  <bradleymeck>we could fake out async readResource, but I am unsure why you would want that over streams generally
20:07:48  <groundwater>does readResourceSync always pull from memory?
20:08:01  <bradleymeck>was trying for minimal API coverage and expand as people’s needs arise
20:08:09  <groundwater>oh i'm just thinking of what random people on the internet will expect to see / recognized
20:08:15  <bradleymeck>no, readResourceSync pulls from w/e loader context you are in
20:08:54  <bradleymeck>in archives it is from memory (for now but thats a long story on how to try and lower bundle footprint), from file loader it is off disk via IO
20:10:51  <groundwater>i think streams are still confusing for many people, it may be worth having a readResource async call because not everyone is going to bundle their apps, but you do want them to be bundle compatible
20:11:44  <bradleymeck>fair enough, ill update the code and spec tonight
20:12:26  <bradleymeck>not doing offsets though, complexity due to encoding/compression in archive ruins it
20:12:53  <groundwater>so you mean all or nothing?
20:13:10  <bradleymeck>yea
20:14:30  <bradleymeck>I can’t jump into something that was deflated at offset X without inflating everything before it. would cause soo many oddities about performance
20:16:02  * calvinfojoined
20:16:56  <tjfontaine>I need to pull up the spec, but I think any resource load should return a stream -- the fact that the stream is sync is an implementation detail of being in bundled mode
20:17:10  <bradleymeck>kind of the same reason I do not want bundles to be in multiple files even though the .zip format supports them via headers
20:17:25  <bradleymeck>tjfontaine: right now streams force a nexttick
20:17:41  <tjfontaine>right
20:18:51  <bradleymeck>do we have any other examples of sync streams? would want at least a way to test if a stream is sync
20:19:35  <tjfontaine>not a good one, but lemme pull the spec here -- just a second
20:25:22  <tjfontaine>bradleymeck: in this spec, lets ignore trying to work (for the moment) with existing versions of node
20:25:31  * rjequit (Remote host closed the connection)
20:25:42  <tjfontaine>bradleymeck: what if we used the magic bytes in the header of the file
20:25:46  <bradleymeck>oh, it breaks some things
20:25:57  <bradleymeck>we cant get 100% on older node
20:26:11  <bradleymeck>but we can get like 98%, so I think focusing on future is best
20:26:22  <bradleymeck>tjfontaine: in the zip header? for what
20:26:26  <tjfontaine>so instead of .noda we could just use .node
20:27:01  <groundwater>tjfontaine: part of the value of this is that other module authors buy into a bundle-compatible format, even when they're not bundling themselves, i think you'll want a readResource async method just because it's *easy*
20:27:04  <tjfontaine>if it's elf or macho we know it's a binary, if it's zip or gzip
20:27:17  <tjfontaine>bah I have a call in 3 mins
20:27:22  * rjejoined
20:27:58  <bradleymeck>tjfontaine: we can do that, but I might test against zip instead of if it is a binary, zip header only needs 64k of trailing bytes to do full check
20:28:09  <bradleymeck>it works same across platforms as well
20:28:51  <tjfontaine>I'm just thinking there may be multiple mime types we want to support
20:30:14  <bradleymeck>as long as the mime types contain a central directory, sounds fine
20:32:07  * c4miloquit (Ping timeout: 240 seconds)
20:35:53  * c4milojoined
20:38:45  * kazuponjoined
20:43:13  * kazuponquit (Ping timeout: 250 seconds)
20:43:35  * mikolalysenkojoined
20:45:22  * c4miloquit (Remote host closed the connection)
20:48:32  * mikolalysenkoquit (Ping timeout: 246 seconds)
20:51:51  * daviddia_joined
20:51:51  * daviddiasquit (Read error: Connection reset by peer)
20:57:04  * daviddiasjoined
21:00:06  * daviddia_quit (Ping timeout: 246 seconds)
21:06:17  * mikolalysenkojoined
21:26:34  * bradleymeck__joined
21:38:16  * thlorenzquit (Remote host closed the connection)
21:38:50  * thlorenzjoined
21:39:21  * kazuponjoined
21:40:59  * kazuponquit (Read error: Connection reset by peer)
21:41:09  * kazuponjoined
21:42:55  * thlorenzquit (Ping timeout: 240 seconds)
21:44:16  * paulfryzelquit (Remote host closed the connection)
21:45:49  * wolfeidauquit (Remote host closed the connection)
21:45:56  * kazuponquit (Ping timeout: 246 seconds)
21:47:05  * inolenquit (Ping timeout: 264 seconds)
21:51:49  * bradleymeck__quit (Quit: bradleymeck__)
21:58:43  * hzquit
21:59:12  * inolenjoined
22:00:40  * paulfryzeljoined
22:00:58  <trevnorris>tjfontaine: think you might be able to answer a uv question?
22:01:29  <indutny>tjfontaine: pong
22:01:31  <tjfontaine>can try
22:01:44  <trevnorris>ooh, indutny is here too. ok for either of you: https://gist.github.com/trevnorris/10191522
22:01:45  <tjfontaine>indutny: do we have our own test case for heartbleed we can include?
22:02:03  <indutny>tjfontaine: nope, and I don't really enjoy making it
22:02:07  <indutny>though I have a patched node
22:02:12  <trevnorris>for some reason the uv_async_send() in worker_cb() isn't triggering the parent_cb()
22:02:18  <indutny>that could send broken heartbeats
22:02:27  <trevnorris>just sits in epoll_wait
22:03:16  <indutny>trevnorris: uv_stop() isn't thread safe
22:03:19  <indutny>I think
22:03:32  <trevnorris>ok, i can fix that.
22:03:47  <trevnorris>but i'll worry about that once the code can actually reach that point. :)
22:03:57  <indutny>which point?
22:04:20  <trevnorris>needing to call uv_stop(). right now it calls parent_cb() then worker_cb(), but never reaches parent_cb() again
22:04:55  <trevnorris>i'm just trying to bounce between two threads using uv_async_send() but for some reason at one point it's getting hung up
22:06:19  <indutny>ah
22:06:53  <indutny>erm
22:07:02  <indutny>why are you setting
22:07:05  <indutny>data = &comm
22:07:09  <indutny>instead of just comm
22:07:14  <indutny>isn't comm a pointer?
22:07:55  <trevnorris>haha
22:08:00  <trevnorris>damn it
22:08:35  <trevnorris>copy pasta from main()
22:08:49  <trevnorris>there. freak. can't believe that was it.
22:08:54  <trevnorris>thanks indutny.
22:08:59  <indutny>:)
22:09:00  <indutny>np
22:09:03  <indutny>you are welcome
22:10:52  <tjfontaine>copy paste is a bad thing
22:12:12  * hzjoined
22:12:37  <indutny>tjfontaine: https://github.com/joyent/node/issues/7415
22:12:45  <indutny>tomorrow is a freeze
22:12:51  <indutny>we need to figure out something on this
22:12:58  * paulfryz_joined
22:16:20  * Kakeraquit (Ping timeout: 255 seconds)
22:16:51  * daviddiasquit (Remote host closed the connection)
22:17:19  * daviddiasjoined
22:18:42  * mikolalysenkoquit (Ping timeout: 240 seconds)
22:21:38  * daviddiasquit (Ping timeout: 240 seconds)
22:23:05  <indutny>oh, not again :)
22:23:10  <tjfontaine>hm?
22:23:10  <indutny>tjfontaine: do not disappear!
22:23:11  <indutny>:)
22:23:18  * thlorenzjoined
22:23:28  <tjfontaine>Im here, getting trolled by someone saying they have yahoo's secret key because of heartbleed
22:23:33  <indutny>hahahah
22:23:39  <indutny>that's very likely
22:23:52  <indutny>though, it is a bit complicated to extract it from memory dumps
22:23:56  <tjfontaine>it's likely that yahoo could have been hit --- but not by this guy
22:23:58  <indutny>I haven't got that far to it
22:24:53  <indutny>I guess to do this - you need to search for some kind of signatures
22:25:13  <tjfontaine>he claims he just used gdb locally to figure out a hueristic
22:25:18  <tjfontaine>anyway, I know this guy is full of shit
22:25:22  <indutny>hahaha
22:25:24  <indutny>ok
22:25:27  <tjfontaine>if this code exists, he did not write it
22:25:28  <indutny>what about SO_REUSEADDR
22:26:07  <tjfontaine>having it off by default is right, it's required for multicast?
22:26:21  <indutny>yes, this is correct
22:26:30  <indutny>what I am really interested in
22:26:34  <indutny>is a method to enabling it
22:26:43  <indutny>do we need to introduce a new method
22:26:44  <indutny>or
22:26:49  <indutny>a flag argument to .bind()
22:27:10  <indutny>https://gist.github.com/indutny/df1800682a70d07eea75
22:27:11  <tjfontaine>I'm not sure a .bind argument makes much sense unfortunately
22:27:11  <indutny>btw ^
22:27:24  <indutny>tjfontaine: so a method
22:28:04  <tjfontaine>ya, which is implicitly called for multicast work
22:31:10  <tjfontaine>indutny: I'm not sure how much like setKeepAlive it should be
22:31:37  <tjfontaine>indutny: is it only valid on socket creation or can it be set anytime?
22:31:59  * thlorenzquit (Ping timeout: 250 seconds)
22:33:07  <indutny>hm...
22:33:12  <indutny>could socket be re-bound?
22:33:38  * mikolalysenkojoined
22:33:46  <tjfontaine>it's a flag that can only be set during binding, and there's an implicit bind if the socket has yet to be bound -- sorry I'm remembering this api now
22:34:09  <indutny>yep
22:34:15  <indutny>so we need a method
22:34:18  <indutny>or
22:34:20  <indutny>an option
22:34:21  <indutny>:)
22:34:24  <indutny>let's stick to option
22:34:34  <indutny>I'm not particularly fond of a new method
22:34:34  <tjfontaine>yes, option
22:34:46  <tjfontaine>can you bind, and then set multicast?
22:35:07  <indutny>hm...
22:35:16  <indutny>I suppose no
22:35:23  <indutny>saghul: ^
22:35:45  * saghul_joined
22:38:50  * saghulquit (Ping timeout: 255 seconds)
22:39:50  * janjongboomquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:43:51  <indutny>tjfontaine: right now it is createSocket(type, listener)
22:44:08  <indutny>we could make alternative signature for it
22:44:12  <indutny>createSocket(options, listeners)
22:44:16  <indutny>where options could contain
22:44:17  <indutny>type
22:44:19  <indutny>and
22:44:26  <indutny>reauseAddr:
22:44:27  <indutny>properties
22:44:29  <tjfontaine>yes, and then we can support unix dgrams some day
22:44:33  <indutny>yep
22:44:37  <tjfontaine>sold
22:44:38  <indutny>so, sounds good
22:44:38  <indutny>ok
22:47:58  * nsmquit (Read error: Connection reset by peer)
22:48:41  * nsmjoined
22:50:53  <trevnorris>wow, bouncing between threads is not a cheap thing.
22:51:12  <indutny>:)
22:51:17  <tjfontaine>context switching, as it turns out, is expensive -- and the more locking you dothe worse it becomes
22:51:17  <indutny>async_send isn't cheap
22:51:23  <indutny>meh
22:51:25  <indutny>it is all async_send
22:51:32  <indutny>and synchronization, of course
22:51:36  <tjfontaine>sure, which has to lock
22:51:37  * bradleymeckquit (Quit: bradleymeck)
22:51:45  <indutny>yeah, in kernel
22:52:07  <trevnorris>any magical way to get around that?
22:52:25  <trevnorris>i mean, it's more expensive then context switching from js to c++, and I find that sort of sad.
22:52:26  <tjfontaine>yes -- event driven programming
22:52:34  <tjfontaine>:)
22:52:37  * bradleymeckjoined
22:53:58  <indutny>trevnorris: use less synchronization
22:54:03  <indutny>this is the only way to work around it
22:54:07  <indutny>lock-less structs
22:54:14  <indutny>producer-consumer objects
22:54:18  <indutny>erm
22:54:19  <indutny>queues
22:54:30  <tjfontaine>http://en.wikipedia.org/wiki/Non-blocking_algorithm
22:54:41  <trevnorris>yeah. still figuring out all these different things w/ threads.
22:55:00  <tjfontaine>what are you actually trying to do -- what are you looking to solve for?
22:55:11  * thlorenzjoined
22:55:36  <trevnorris>I want the cheapest way possible to ping a thread, and have that thread run a callback.
22:55:52  <trevnorris>screw synchronization and all that.
22:55:52  <indutny>without pinging back?
22:56:29  <indutny>I think you'll still need some sort of synchronization
22:56:35  <indutny>to let other thread know about new changes
22:56:40  * thlorenzquit (Remote host closed the connection)
22:56:46  <indutny>otherwise you'll need to poll
22:56:50  <trevnorris>well, yeah, it'll have to ping back.
22:57:13  * thlorenzjoined
22:57:31  <indutny>ok
22:58:40  <trevnorris>i'm coming from this from the js side. I think of it like this. call callback A (which is a function in another thread) then when it's done it'll call callback B (in the originating thread). but the difference is say that each js function is self contained (meaning they don't affect the global scope) so they could technically run simultaneously.
22:59:08  <tjfontaine>you're trying to do isolates in node again
22:59:10  <tjfontaine>is what you're saying
22:59:15  <trevnorris>no no.
22:59:22  <trevnorris>i'm just saying that's the paradigm i'm used to
22:59:38  <trevnorris>and i'm trying to translate that to what it means in C, using threads
23:00:37  <indutny>you need dispatch_queue
23:00:38  <indutny>:)
23:00:46  <tjfontaine>blocks?
23:00:47  <tjfontaine>:)
23:01:00  <tjfontaine>http://en.wikipedia.org/wiki/Grand_Central_Dispatch
23:01:06  * thlorenz_joined
23:01:12  <indutny>AFAIK, it is one of the most robust systems
23:01:19  * thlorenzquit (Ping timeout: 240 seconds)
23:01:22  <tjfontaine>ya
23:01:35  <tjfontaine>with blocks or c11 you get closures as well
23:01:40  <tjfontaine>it's like you have javascript in C :P
23:01:50  <trevnorris>....
23:01:55  <trevnorris>i just threw up a little in my mouth
23:02:04  <trevnorris>are all languages slowly converging?
23:02:05  <tjfontaine>it's not as scary as it sounds
23:06:11  * petka_quit (Quit: Connection closed for inactivity)
23:06:26  <trevnorris>ok. so it's a lot cheaper to create a thread and have it poll, waiting for something to come in?
23:07:30  <indutny>tjfontaine: https://github.com/joyent/node/pull/7430
23:07:39  * doyjoined
23:07:47  <indutny>tjfontaine: erm
23:07:51  <indutny>trevnorris: erm
23:07:55  <indutny>trevnorris: not exactly
23:08:09  <indutny>but in some cases busy-looping is faster than using synchronization primitives
23:08:23  <indutny>though it is quite rare
23:08:24  <indutny>ok
23:08:25  <indutny>ttyl, guys!
23:08:29  <trevnorris>see ya
23:12:00  * paulfryz_quit (Remote host closed the connection)
23:14:25  <Dirkson>What is uv_listen's second argument, "backlog" for?
23:14:58  * hzquit
23:16:51  <trevnorris>Dirkson: man 2 listen
23:16:54  <trevnorris>same backlog
23:17:36  <Dirkson>trevnorris: Thanks. Basically, how many queued connection requests will be accepted before they start dropping?
23:18:01  <trevnorris>yeah, how many queued connections before receiving ECONNREFUSED
23:18:06  <Dirkson>Cool : )
23:18:08  <Dirkson>Thanks!
23:18:14  <trevnorris>yup :)
23:21:05  <doy>so if i need to do more initialization between fork and exec than the uv_spawn api allows for, do i have any other options than just handling all of the fork/exec logic myself?
23:21:22  * brunklejoined
23:22:08  <trevnorris>nope. we do the same thing in node
23:22:13  <doy>bah
23:22:55  * kevinsimperquit (Remote host closed the connection)
23:24:54  * paulfryzelquit (Read error: Connection reset by peer)
23:25:27  * paulfryzeljoined
23:27:18  * stephankquit (Ping timeout: 240 seconds)
23:31:59  * seldo_quit (Remote host closed the connection)
23:33:11  * seldojoined
23:42:37  * paulfryzelquit (Remote host closed the connection)
23:43:03  * mikolalysenkoquit (Ping timeout: 250 seconds)
23:43:38  * kazuponjoined
23:45:06  <tjfontaine>doy: what all do you want to do?
23:46:38  <doy>trying to write a terminal emulator, need to do things like set the controlling tty, etc
23:47:12  * bradleymeckquit (Quit: bradleymeck)
23:47:43  * kazuponquit (Ping timeout: 240 seconds)
23:47:53  * paulfryzeljoined
23:48:08  * mikolalysenkojoined
23:48:27  * daviddiasjoined
23:52:17  * paulfryzelquit (Ping timeout: 246 seconds)
23:52:38  * daviddiasquit (Ping timeout: 240 seconds)
23:55:12  <tjfontaine>trevnorris: btw, you might interested to see how this works https://github.com/joyent/v8plus/blob/master/v8plus_csup.c#L172-L180 :P
23:56:01  <trevnorris>tjfontaine: oooh. cool.
23:56:47  <tjfontaine>trevnorris: LeftWing wrote all that, he can provide you context around it if you have questions
23:56:58  <LeftWing>Sure can.
23:56:59  <trevnorris>awesome. thanks for the resources.
23:58:19  * thlorenz_quit (Remote host closed the connection)
23:58:24  <trevnorris>LeftWing: looking at the calls, seems this won't run on windows. at least that's what I get from all the direct calls to pthread_*. unless there's a windows impl somewhere
23:59:13  <tjfontaine>a lot of that can be used in terms of uv_thread_*
23:59:36  <trevnorris>ah ok