Index

Show enters and exits. Hide enters and exits.

00:31:06evanso
00:31:14boyscoutMark a thread as sleeping when waiting on a lock - aa74ac8 - Evan Phoenix (hydra)
00:31:14boyscoutHandle bad unlocks properly - b5bbed6 - Evan Phoenix (hydra)
00:31:14boyscoutSimple refactor - 1cc83d1 - Evan Phoenix (hydra)
00:31:19evanshould locking an object be an operation that can be interrupted?
00:49:05Defilerevan: is there a timeout on that operation if it gets hung up?
00:49:26evanatm, no, but there could be.
00:49:26Defileralterantely, what could make locking an object take an indeterminate amount of time
00:49:39evananother thread not giving up the lock.
00:49:56Defilersounds like something you'd want to be able to cancel and give up on then
00:50:11Defilerbut a timeout might be the right way, vs. an interruption
00:50:26evanwell, i'll do them both if i do them
00:50:28evanthey're nearly the same.
00:50:51evanbecause i have to use a condition variable to wait for a specific amount of time
00:51:04evanand a condition variable is what i'd use to be able to interrupt the operation.
00:51:38evanin which case, i could go ahead and implement JVM style Object#wait, #notify, #notifyAll
00:51:51evansince those are just condvar operations
00:52:26Defileryeah
00:52:38DefilerI guess that sounds like something necessary
00:56:26evanok
00:56:27evandoing it!
00:58:52Defilercool
01:03:53evanhm, i guess a timeout in microseconds?
01:13:13Defilerthat sounds like the right timescale, yeah
01:14:33Defilerhow about a really opaque and tricky-to-initalize TAI64 struct? heh
01:15:43Defilerthen you can specify it in attoseconds
01:20:12evanoh man
01:20:25evanTIA64 seems cool
01:20:34Defilerit is
01:20:39Defilerbest time format
01:21:02DefilerI like how cleanly it extends to higher precision
01:36:35evanDefiler: yeah, doesn't it support the end of the universe?
05:42:01dbussinkevan: ping?
05:43:47slavahi brixen
05:44:05slavayou're such a google hater now :)
05:47:28brixenslava: haha
05:50:14brixenslava: don't worry, I know nice people who work at M$ too :)
05:51:18dbussinkbrixen: btw, going to talk about rbx at rubyandrails.eu in october :)
05:51:36brixendbussink: woot!
05:56:08dbussinkbrixen: at least, the guy i asked about was enthousiastic about it, and since he's organizing it, that's probably going to be fine :P
05:58:20brixendbussink: do you know what you'll be talking about?
06:00:02dbussinkbrixen: been thinking about it, more a general talk i think, explaining some concepts rbx uses to speed up ruby code etc.
06:00:07dbussinkand show some examples of it in action
06:00:18dbussinki don't expect the audience to be too al knowing already
06:00:22dbussinkbut that's my guess atm
06:00:27brixencool
06:00:34dbussinkbrixen: if you have tips, please tell them :)
06:02:15brixendbussink: I'm thinking of proposing a talk for rubyconf uruguay
06:02:33brixensame deal, mostly beginners in the audience
06:05:10dbussinkbrixen: not a lot of die hard european devs in here normally, same for south america i guess :P
06:07:03brixendbussink: yeah, interesting to understand that better
06:07:18brixenis it opportunity or exposure or something else
06:08:06dbussinkbrixen: also feels like a smaller ruby community in general here
06:08:29brixenprobably, yeah
06:09:18dbussinkbut i'm going to head to the office
06:09:20dbussinkback later
07:36:34dbussinkguess everybody is asleep right now
07:37:03slavaits half past midnight in the one true timezone
07:41:09dbussinkslava: hehe, don't care that global stuff often happens on gmt base i guess :P
11:50:56dbussinkyay: http://rubyandrails.eu/articles/dirkjan-bussink-explains-rubinius-at-rar10
12:19:33kronos_vanodbussink, gratz
12:24:44dbussinkkronos_vano: i know the guy organizing it though ;)
12:24:53kronos_vano:D
16:01:21evanmorning.
16:01:33mitchellhgood morning
16:18:03evanmitchellh: welcome, are you new?
16:18:29mitchellhI've been lurking, been wanting to help with FFI so I can get vagrant (vagrantup.com) working on rbx
16:18:35mitchellhbut haven't had time :(
16:18:39evanah cool
16:20:58dbussinkevan: howdy :)
16:21:18evanheya.
16:21:18dbussinkevan: proposal for the talk was accepted :)
16:21:22evani saw!
16:21:23evanyay
16:21:48dbussinki had to poke the guy for spelling my name wrong though :P
16:21:52dbussinkdutch people always do that
16:22:02evanha
16:22:11dbussinkno one else can pronounce it, but at least they write it right
16:22:14evanyou'd be surprised
16:22:16evani get that too.
16:22:30evanI get "even" sometimes
16:22:32dbussinkisn't evan like the standard way to write your name?
16:22:37evanoh yeah, it is.
16:22:42evanpeople are just dumb.
16:22:48dbussinkhehe, that's true yeah
16:22:55evanalso, "fenix" for phoenix
16:22:58evanO_o
16:23:02mitchellhLOL
16:23:18dbussinkwe had someone complain today that we invaded his privacy because he could see his previous searches in a search input field :S
16:23:32dbussinkthat we should stop gathering information on him
16:23:35evanawesome
16:23:41evanthose people are fun
16:23:44evan@_o
16:23:50dbussinkhehe, yeah
16:24:12dbussinkbtw, i have some hydra crashes in caught in gdb if you're interested :)
16:24:34evani am!
16:24:48dbussinkevan: i have this one: https://gist.github.com/1df9f85239242f0ac214
16:25:14evanmmm ok.
16:25:14dbussinkevan: and this one: https://gist.github.com/afef744f25318f251313
16:25:43evanhrm.
16:25:43evanok.
16:25:50evanso
16:25:54evanfrom now on
16:26:01evani need "thread appl all bt <number>"
16:26:07evanerr "thread apply all bt <number>"
16:26:13dbussinkevan: ok, will get you that :)
16:26:16evank
16:27:00dbussinkevan: this is one for the first error: https://gist.github.com/2ee25368d8449d74e66e
16:27:20evanYIKES
16:27:21evan40 threads.
16:27:22evan:/
16:27:30dbussinkevan: hmm, looks like that was still with older code
16:27:38dbussinkhaven't closed any of the crashed rbx's
16:27:40evan45 threads actually.
16:27:48evanok
16:27:53evantry with the latest
16:28:00evanbut I did fix some stuff.
16:28:13dbussinkevan: the second error is with latest
16:28:19evank
16:28:23dbussinkevan: let me get the threads backtrace with that one
16:28:27evank
16:28:58dbussinkevan: https://gist.github.com/0cc09570340c620f5d35
16:29:27evanooh
16:29:30evanprobably need a lock there.
16:29:30dbussinkevan: that does show some concurrent activity
16:29:38evaninside add_cache
16:29:47evani'll bet 2 methods code setup concurrently.
16:29:54evanand corrupted the IC registry.
16:34:42dbussinkevan: that should be an easy fix then or does it entail more?
16:35:30evaneasy
16:44:46evannicksieger: morning nick.
16:44:53nicksiegerhi evan
16:45:01nicksiegerhow's the hydra slaying coming
16:45:23evani'm using the most powerful move the ancient world has to offer: the jump stab.
16:45:24dbussinki just pointed evan a head to be slain ;)
16:46:22dbussinkevan: could i add this easily myself?
16:46:46evansure
16:47:12dbussinkevan: anywhere i could look for an example of how to properly lock stuff?
16:47:26evansure, it's easy
16:47:30evango into inline_cache.hpp
16:47:40evanand make InlineCacheRegistery a subclass of Lockable
16:47:43evanie
16:47:49evanclass ICR : public Lockable {
16:48:09evanthen go into it's methods in inline_cache.cpp
16:48:22dbussinkevan: it's now a Dispatch, is that a problem?
16:48:29evanhuh?
16:48:30evanno
16:48:33evanInlineCacheRegistery
16:48:35evannot InlineCache
16:48:41dbussinkow, sorry, doh :)
16:49:42evanso, then, in ICR's methods in inline_cache.cpp
16:49:46evanmake the first line
16:49:48evanSYNC_TL
16:50:01evanif STATE was passed into these, you could use SYNC(state)
16:50:10evanif you want to make that change too, go for it.
16:50:31evanSYNC_TL gets state from the thread local
16:51:05dbussinkevan: ah ok, i was going to ask about that :)
16:51:32dbussinkevan: do i need to explicitly unlock?
16:51:40evannope!
16:51:45dbussinkok, cool :)
16:51:47evanawesome huh.
16:51:54dbussinki assume remove_cache also needs it then? :)
16:51:58evanSYNC in in lock.hpp if you want to check it out
16:52:01evanyeah, all of them need it.
16:52:31evannicksieger: i have a java/jvm question for ya
16:52:40nicksiegersure, i'm game
16:52:52evancan you interrupt synchronizing on an object?
16:53:10evanT1 does synchronize(obj) { ....
16:53:22nicksiegeryes, you can
16:53:26nicksiegerThread#interrupt
16:53:29evanT2 does has obj locked, and does T1.interrupt
16:53:44evanok, so T1 wakes up then and raises a ThreadInterrupted exception
16:53:51nicksiegerhttp://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#interrupt()
16:53:58evanok, i thought so
16:53:59nicksiegerexactly
16:54:01nicksiegerthat's pretty muchit
16:54:09evanbut I couldn't find out if synchronize checked the interrupted flag
16:54:21nicksiegeri don't think so.
16:54:29nicksiegersynchronized() { … } is syntax
16:54:44nicksiegerin the VM it's MONITORENTER and MONITOREXIT instructions
16:54:53evanyeah, i know
16:54:56nicksiegerok
16:55:04evanbut i couldn't find out if MONITORENTER checks the interrupted flag
16:55:05nicksiegeryeah, so not sure about checking interrupt status
16:55:20evanie, does MONITORENTER throw ThreadInterrupted
16:55:24evangoogle!
16:55:39nicksiegermy guess is no. i've looked at some lock implementations and they do things like check interrupted status and bail early
16:56:00evanwell, the impl also has to be implemented with a condition variable
16:56:19evanso that #interrupt can signal T1 via the condvar and check the flag
17:08:36dbussinkevan: how does this look? https://gist.github.com/02e422e035a9cf08b8b4
17:09:03dbussinkevan: i see a global cache clear there btw, is that already thread safe? at the top there in vm/builtin/system.cpp
17:09:16evanprobably not
17:09:26evanthats a little more tricky though
17:09:47evanbecause reading the global cache is in the fast path
17:09:51evanso we don't really want to lock it
17:11:49nicksiegerevan: don't know if you looked in jdk sources yet
17:12:02evani started to
17:12:03nicksiegeri think http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/13f94cc87253/src/share/vm/runtime/synchronizer.cpp has some of the monitorenter stuff
17:12:08nicksiegersearch for "slow_enter"
17:12:08evanthanks!
17:12:16nicksiegerdoesn't look like any interrupt checking is in there
17:12:17evani was hoping for a pointer
17:14:17nicksiegerof course that's the higher level stuff. OS-specific code will be in src/<os>/ ...
17:15:38brixenback
17:16:01brixenan hour inverted in the dentist's chair and my back feels better than it has in a week
17:16:16brixenbut now I can't eat anything for hours, and I'm hungry :)
17:16:22evanbrixen: ha!
17:16:31evanwell, at least your back feels great.
17:16:42brixenbetter, not great yet
17:16:53brixenmaybe I should schedule another appt
17:17:22dbussinkevan: but is the patch ok?
17:29:01dbussinkevan: got a new one after that patch: https://gist.github.com/bb4254b8997c46737b33
17:30:39evangot a what?
17:30:45evanyou left off the reason it stopped
17:32:37dbussinkevan: hmm, already cleared it out, tried it again but now i got this: https://gist.github.com/b2c360c8ee11c1781257
17:32:56evanI gotta see all the threads
17:32:56dbussinkevan: dunno if this is my change causing havoc though
17:33:00evannot just the current one.
17:33:37dbussinkevan: i added to it now
17:33:59evan:/
17:34:02evanmakes no sense
17:34:06evanput a breakpoint on abort
17:34:08evanand run again.
17:36:48dbussinkevan: that previous one also was in llvm, so seems something is up there
17:36:56evandoubtful.
17:36:57dbussinkevan: shall i commit that patch i made or not?
17:37:00evanno.
17:37:05evannot if it crashes everytime.
17:37:13evangist me the patch
17:37:31dbussinkevan: https://gist.github.com/02e422e035a9cf08b8b4
17:38:34evanhrm.
17:39:09evani guess go ahead
17:39:14evanyour crash must be unrelated.
17:49:48jeremyevansJust found a couple more C API methods that rubinius doesn't implement and I'm using in my extension: http://github.com/evanphx/rubinius/issues/issue/436
17:52:14evanjeremyevans: those don't expose an re*, right?
17:52:20evanthey take and return VALUEs
17:52:21evan?
17:53:15jeremyevansevan: Yes
17:53:22evank
17:53:25evanshould be trivial then.
17:54:25jeremyevansevan: rb_reg new is VALUE (char*, long, long); and rb_reg_nth_match is VALUE (long, VALUE)
17:54:47evank
17:54:56brixenjeremyevans: did you want to take a stab at implementing them?
17:55:26jeremyevansbrixen: I suppose I could.
17:55:39brixenI can give you some pointers
17:55:39dbussinkevan: ok, i'll commit it, so you can check it out then too
17:55:49jeremyevansbrixen: Haven't hacked on rubinius before though. Should I read anything first?
17:55:53dbussinkevan: this is running ci in gdb btw, but you probalby noticed that :)
17:55:57brixenjeremyevans: first, for the specs, check out spec/ruby/optional/capi
17:56:11brixenjeremyevans: I'm going to find a commit that you can follow along
17:56:13evandbussink: right.
17:56:16jeremyevansbrixen: Thanks
17:56:58brixenjeremyevans: git show 5bf23baa
17:57:34brixenjeremyevans: here's the code that goes with those specs: git show d14e77dfd28
17:58:27brixenjeremyevans: have a quick read of doc/specs.txt
17:58:45jeremyevansbrixen: Weird, I'm working with an .rvm rbx-head, which doesn't look like it has full history
17:59:02jeremyevansbrixen: Let me do a full clone
17:59:21evanyou'll need a normal clone, yes.
18:00:08dbussinkevan: ok, pushed
18:00:14boyscoutAdd locks around modifying the InlineCacheRegistry - d46af39 - Dirkjan Bussink (hydra)
18:00:17evank
18:10:19dbussinkevan: i have to say that after this i did start to see more crashes, maybe it exposes an issue somewhere else?
18:11:13evanmaybe.
18:13:56dbussinki already feel cool enough that i could actually fix something :P
18:20:27dbussinkevan: are you seeing these crashes too?
18:20:35evanhaven't updated
18:20:40evanin the middle of something else.
18:20:44dbussinkok, cool
18:20:56evanadding timeouts and the ability to interrupt locks
18:22:51dbussinkah, cool :)
18:23:17evanwe'll probably also get the ability to use objects as condition variables
18:23:30evansince it goes with the arch required for timeouts and interrupts
19:08:34dbussinkevan: btw, did someone mail you with a security issue?
19:08:51evanyep
19:09:03dbussinkevan: ah ok, asked him on twitter to mail you directly
19:09:12dbussinksince there's no security list or something
19:09:17evanok cool.
19:09:18evanyeah
19:15:46dbussinkevan: should we set up something for that or not worth it atm?
19:36:37jeremyevansbrixen: Cloning finally finished and I have the spec created
19:37:14jeremyevansbrixen: I don't have any recent C++ experience (C only), so I'm not sure how to create a Regexp using Rubinius's C++ API
19:47:03brixenjeremyevans: take a look at vm/capi/regexp.cpp
19:47:14brixenjeremyevans: you should be able to rb_funcall to Ruby code I'm thinking
19:47:30brixenjeremyevans: just getting some lunch, bbiab...
19:47:41jeremyevansbrixen: I found that and I'm working with it. Thanks.
19:47:50brixensweet
19:50:32jeremyevansbrixen: My spec passes on mri, which is good :)
19:54:03rueHumm. Another .nl conf? Might make this one
19:54:18rueMy flight prohibition ends in September too
19:56:16dbussinkrue: flight prohibition?
20:06:36ruedbussink: My hematocrit was very high in the spring so I have not been allowed altitudes
20:07:03dbussinkrue: doing epo? :P
20:18:54jeremyevansIs Qnil an integer, a rubinius::Object, or one of the two depending on context?
20:19:32brixenit's an immediate
20:19:58brixenit's a tagged pointer
20:19:59jeremyevansbrixen: What's the appropriate rubinius::Object to use for nil?
20:20:10brixenit looks like a pointer but isn't a valid address
20:20:11ruedbussink: I wish!
20:20:17brixenjeremyevans: Qnil
20:20:29rue(Any WADA people reading: just kidding.)
20:20:29jeremyevansbrixen: That's what I'm using and rake build is failing
20:21:05brixenjeremyevans: could you gist me your changes
20:21:44jeremyevansbrixen: http://pastie.org/1089083
20:23:32brixenjeremyevans: why not a rb_funcall?
20:24:12jeremyevansbrixen: I suppose that would work, since I'm creating the string anyway.
20:24:58brixenthat's the preferred way to do stuff in c-api
20:25:04brixencall a ruby method if you can
20:26:26jeremyevansbrixen: Makes sense.
20:28:05jeremyevansbrixen: That appears to work
20:28:36jeremyevansbrixen: Let me finish compiling and run the specs to see if it works
20:28:42dbussinkbrixen: how big would the performance differ for the capi because of this?
20:28:58dbussinkjust curious :)
20:29:08brixendbussink: dunno
20:29:22brixenjeremyevans: Qnil is different in c-api than in rbx
20:29:29brixenjeremyevans: look at ruby.h
20:29:43brixenjeremyevans: so, writing code for the c-api can be a little confusing
20:30:02jeremyevansbrixen: That makes sense why code I copied from C++ to the CAPI wasn't working
20:30:15brixenyeah, that ain't gonna work :)
20:30:28jeremyevansbrixen: So is there a CAPI version of C++ Qnil?
20:30:50brixenyes, but generally you want the c-api one
20:31:52brixenjeremyevans: you have to use RBX_Qnil in the c-api
20:32:37jeremyevansbrixen: Noted.
20:32:49brixenbut those cases are pretty rare
20:32:59brixensorry, it's confusing :/
20:33:20jeremyevansbrixen: Running the specs now. The default task includes the capi specs, right?
20:33:29brixenyeah
20:33:37dbussinkit does these days :P
20:33:49brixenyou can always bin/mspec spec/ruby/optional/blah
20:35:50phlebasbrixen: since your in capi mode, I have added a few capi specs to my fork on timfel/rubyspec since i started working on capi support for jruby
20:36:18brixenphlebas: oh cool
20:36:26brixenphlebas: could you git fp them?
20:36:54phlebassure
20:37:03brixensweet, appreciated
20:37:42phlebassend them to you directly?
20:37:51phlebasor to ml?
20:38:15brixencould you gist and link in a github issue?
20:38:21phlebaswill do
20:38:30brixenthanks
20:38:37jeremyevansbrixen: http://pastie.org/1089106
20:38:48jeremyevansbrixen: Looks like I'm doing something wrong
20:39:19brixenyeah
20:39:32brixenyou need to use handles with C++ objects
20:39:43jeremyevansbrixen: OK. How do I do that?
20:40:04brixenlike env->get_handle(pat)
20:41:14jeremyevansbrixen: That appears to have fixed it
20:42:27brixencool
21:05:04brixenphlebas: looks like I just got you patch spam :D
21:05:10brixener your* even
21:05:15phlebasyou made me
21:05:18brixenheh
21:05:23brixennah, thank you very much
21:05:26phlebasonly three more to go
21:05:31brixenheh, ok
21:07:45brixenphlebas: I'll get these merged in tonight
21:08:02jeremyevansbrixen: http://pastie.org/1089155.txt
21:08:22jeremyevansbrixen: Will that work for patch submission?
21:08:47brixenjeremyevans: looking at it now
21:11:22phlebasbrixen: thanks, I'm done posting for now, have to hunt a few segfaults :)
21:14:47brixenphlebas: fun!
21:24:55jeremyevansbrixen: any thoughts?
21:25:36brixenyes
21:25:59boyscoutAdd spec for C API rb_reg_new - 82bb2f9 - Jeremy Evans
21:25:59boyscoutAdd C API function rb_reg_new - 2b1315f - Jeremy Evans
21:25:59boyscoutAdd spec for C API rb_reg_nth_match function - 8039442 - Jeremy Evans
21:25:59boyscoutAdd the C API rb_reg_nth_match method - 5975010 - Jeremy Evans
21:25:59boyscoutA couple spec style cleanups. - cafdc59 - Brian Ford
21:26:11jeremyevansbrixen: Awesome!
21:26:11brixenjeremyevans: ^^^ :D
21:26:18brixenjeremyevans: ask evan for a commit bit!
21:26:24brixenand thanks for diving into that!
21:32:10brixengrabbing coffee with an old friend, bbl...
21:40:34jeremyevansWhat's the rbx way of using rb_str_buf_new, writing into the pointer, and then using rb_str_set_len to set the length of the string?
21:42:49dbussinkjeremyevans: i guess you don't
21:42:50dbussinkbut maybe brixen or evan know if you can
21:43:30evanjeremyevans: don't.
21:43:33evanis the way.
21:43:46evanbut if you must, those 2 things should already work.
21:43:53jeremyevansevan: What's the recommended alternative?
21:44:06evanuse a C buffer
21:44:11jeremyevansevan: It doesn't appear to be working for my extension. I'm getting empty strings
21:44:20evanuse a normal C buffer
21:44:23evanbuild it
21:44:28evancall rb_str_new with it
21:44:39evani thought we had that working
21:44:40jeremyevansevan: Doesn't that require copying the string?
21:44:48evanyes, it does.
21:45:00evanbut i doubt you've benchmarked that copy :)
21:45:08jeremyevansevan: I have actually :)
21:45:21evanwell, it doesn't matter rbx wise
21:45:28jeremyevansevan: It's the reason I went with the rb_str_buf_new for mri
21:45:30evanto support that, a copy is done behind the scenes
21:46:28evanwe don't give you raw access to the data
21:46:29evanwe can.t
21:46:31jeremyevansevan: I can understand it's no faster in rbx, but it is faster in MRI
21:47:10evanwe can support those apis
21:47:12evani thought we did.
21:47:35jeremyevansevan: and I'd prefer not to rewrite a bunch of existing code. Let me see if I can add a spec for it (unless there is one already)
21:47:49evank
21:47:51evanthats fine.
21:47:53evanwe should support it.
21:49:10jeremyevansevan: Doesn't appear to be an existing spec. I'll add one
21:50:45evanjeremyevans: what extension is this?
21:51:36jeremyevansevan: This is the rewrite of the stdlib Date/DateTime classes in C
21:51:44evangotcha
21:56:25boyscoutCI: Commit cafdc59 failed. http://github.com/evanphx/rubinius/commit/cafdc5992a8aef3f63738bcb062cf44ded945396
21:58:32evan:/
21:59:09evanwhy the fuck did that start failing.
22:12:26jeremyevansevan: http://pastie.org/1089312.txt <- Failing spec for rb_str_buf_new/rb_str_set_len combination
22:13:10evanok
22:14:08jeremyevansevan: Found the problem, in rb_str_set_len
22:14:37jeremyevansevan: We check the existing length of the string, which is 0 for rb_str_buf_new
22:14:48evanfix it!
22:14:49jeremyevansevan: We probably should check the size of the buffer
22:14:53evan:)
22:14:56evanwhat line?
22:15:10jeremyevansevan: 370
22:15:20jeremyevansevan: capi/string.cpp
22:15:23evanthat seems fine.
22:15:30evanwhats wrong with that?
22:15:38evanstring is the buffer
22:15:42jeremyevansevan: string->size() is probably 0
22:15:48evan.....
22:15:54evanoh, i see.
22:15:56jeremyevansevan: In MRI, the size of the string is different than the size of the buffer
22:16:00evanyeah, that should be
22:16:07evanstring->data()->num_bytes()
22:16:11evanright right
22:16:26evansize() here is the virtual size, not the size of the backing buffer.
22:16:54evanstring->data()->size()
22:16:56evanshould be used.
22:17:03jeremyevansevan: OK.
22:17:49jeremyevansevan: compiling now
22:26:28jeremyevansevan: Very weird. It passes the first line of the spec, but not the second
22:26:46evanfails how?
22:26:46jeremyevansevan: That makes no sense
22:27:01jeremyevansevan: it's empty . Let me pastie
22:28:44jeremyevansevan: http://pastie.org/1089338.txt
22:30:49jeremyevansevan: It appears to fail for more than 3 characters
22:30:59evan....
22:31:05jeremyevansevan: 1, 2, 3 characters work, 4 and 5 given the empty string
22:31:07evanwhat is rb_str_buf_new doing?
22:31:49evanhrm.
22:31:52evanthats odd.
22:31:55evanshould work...
22:35:55jeremyevans|Blaze|: Qnil is also 4 in MRI. Start your conspiracy theories :)
22:38:03evanjeremyevans: well, i'll bbiab.
22:38:10evani'll take a look myself shortly.
22:38:17jeremyevansevan: OK. Thanks!
22:38:42cremesjeremyevans: slightly OT, but has ruby-core reconsidered your date perf patches that use a Hash?
22:39:05jeremyevanscremes: Haven't had any updates since my last post
22:39:35cremeshmm... so odd that they would reject it for a patch using Struct
22:39:38cremesmind boggles
22:39:44cremesanyway, thanks for the update
22:39:52jeremyevanscremes: ruby redmine doesn't allow us mortals to reopen tickets (I think), and I'm too polite to submit a new ticket :)
22:40:29jeremyevanscremes: Maybe tadf will take another look when he fixes the Date#rfc3339 issue I submitted
22:49:38jeremyevansevan: Found the bug
22:50:34jeremyevansevan: well, part of it at least
22:51:03jeremyevansevan: updating string->num_bytes outside of the if statement seems to work
22:51:41jeremyevansevan: I'm not sure if that will automatically resize the string, though
22:52:08jeremyevansevan: And you obviously don't want to increase the listed buffer size without increasing the size of the buffer
22:52:39jeremyevansevan: Since I'm don't know a great deal about rbx's string implementation, I'm not sure if my patch is correct
22:53:54jeremyevansevan: I'll leave it to you to decide: http://pastie.org/1089381.txt