monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Monotone-devel] Monotone Bug Message


From: Zack Weinberg
Subject: Re: [Monotone-devel] Monotone Bug Message
Date: Fri, 28 Sep 2007 23:32:34 -0700

On 9/28/07, Zack Weinberg <address@hidden> wrote:
> I don't speak German, but I suspected that "Die Wartezeit für die
> Verbindung ist abgelaufen" was a kernel failure message, so I looked
> it up in glibc's message translations, and indeed: it means
> "Connection timed out" in English.  This is a normal network condition
> -- for whatever reason, your computer and the server stopped talking
> to each other before the pull was finished.  If you do it again it
> will probably pick up where it left off.

Looking at the code a bit, the diagnostic originates in the Netxx
library.  This library documents  two different exceptions that it
might throw - Netxx::NetworkException for problems on the network,
Netxx::Exception for problems indicating bugs in the library user.
But the library itself blithely assumes that all failures from a given
system call will be one or the other, which just isn't so.  In
particular, the OP's diagnostic comes from a recv(2) failure with
errno=ETIMEDOUT, and all recv() failures cause Netxx::Exception to be
thrown.

So - monotone isn't actually doing anything wrong, this is a bug in
netxx.  Is there any hope of getting it fixed upstream?  I do not
relish the thought of auditing the two-dozen or so places where netxx
throws exceptions and fixing them to pay attention to errno.

Tangentially, the chain of "foo error:" strings that get tacked on the
beginning of the actual error message is getting kind of absurd here,
doncha think? --

mtn: Fataler Fehler: std::runtime_error: Netzwerk-Fehler: recv failure:

(with precisely half of them translated, for additional comedy.)  I
think we maybe ought not do things like this in intermediate layers

  catch (Netxx::Exception & e)
    {
      throw oops((F("network error: %s") % e.what()).str());;
    }

instead we should catch the various library exceptions that will cause
program termination in the outermost catch chain (in cpp_main.)

zw

reply via email to

[Prev in Thread] Current Thread [Next in Thread]