Alex Young wrote:

> Does this look familiar to anyone?
> 
> NoMethodError: undefined method `+' for nil:NilClass at
> /usr/local/lib/ruby/1.8/net/protocol.rb:176:in `write0'
> 
> I'm getting it sporadically during some fairly heavy XMLRPC traffic.  It
> doesn't make very much sense to me, because write0 looks like this:
> 
> def write0(str)
>    @debug_output << str.dump if @debug_output
>    len = @io.write(str)
>    @written_bytes += len  # <= line 176
>    len
> end
> 
> The error must mean that @written_bytes is nil.  It's only called from
> within a block passed to writing, which looks like this:
> 
> def writing
>    @written_bytes = 0
>    @debug_output << '<- ' if @debug_output
>    yield

You aren't showing us the block to which this yield refers. Does that block
modify @written_bytes?


>    @debug_output << "\n" if @debug_output
>    bytes = @written_bytes
>    @written_bytes = nil
>    bytes

Okay, here you are modifying the @written_bytes class variable, assigning it
nil, and this is likely to be the problem. Can I ask why you are using an
instance variable here rather than a method-local one? Can't this need be
met by a local variable?

> end
> 
> Is this a known thread-safety issue with a known solution, or would a
> patch be in order?  I've been testing this on 1.8.4, because that's what
> we've got in production.  Does anyone know if it's been addressed in
> 1.8.5?

AFAICS, it's not yet obvious to me that it is a language issue, as opposed
to a coding issue.

-- 
Paul Lutus
http://www.arachnoid.com