On 11-Feb-08, at 6:06 PM, Mitch Mitch wrote:

> My suggestion is to change the line to:
>
> rescue RangeError
>
> Which only rescues the error that the author was intending (I  
> believe).
>
> Am I missing anything here?

	RangeError is generally used only to catch errors with a numerical  
range. I think what you're intending here is probably IndexError  
however even that isn't correct since

> for i in @observer_peers.dup
>      begin
>        i.update(*arg)
>      rescue
>        delete_observer(i)
>      end
>    end

since I don't believe a for...in loop can exceed the index in this  
case unless something else is modifying @observer_peers at the same  
time...?

I confess the "for...in" looks mighty strange to me, as I find  
"@observer_peers.each do |i|" much easier to read these days.

I'd hazard a guess, from that little chunk of code, that the author's  
intention was not to catch bounding errors with the loop but rather to  
destroy any observers that were causing critical errors so as to not  
have to deal with them. From the sounds of what you describe, it was  
working as such as well, though silently destroying someone's stuff  
seems just plain rude to me :)

These are all just guesses of course, as I've never used DRb and only  
seen the chunk of code you posted. Hope that help.

Regards
Chris