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

Bug#715028: apr: FTBFS on hurd-i386: stuck configure test for accept4



Source: apr
Version: 1.4.8-1
Severity: important
Tags: patch
User: debian-hurd@lists.debian.org
Usertags: hurd

Hi,

the new version of apr fails to build on hurd-i386 [1].

During the build, the configure test for accept4 gets stuck, and thus
the build is then killed after the timeout.
What happens is that inside the test the connect in the child fails
with an errno not checked among the ones to retry the connect again;
such errno (EADDRNOTAVAIL) may be returned while the bind operation
(in the parent) is in progress (at least on Hurd), so just check it too
(it is a valid errno for connect [2]) and continue connect'ing.

(Ideally, instead of retrying continuously, a better solution could be
have the parent notify to the child using e.g. a pipe just before the
listen. OTOH, since this is a simple configure check just to check that
accept4 works, the loop may be an acceptable solution.)

Patch attached for the additional EADDRNOTAVAIL check.

[1] https://buildd.debian.org/status/logs.php?pkg=apr&ver=1.4.8-1&arch=hurd-i386
[2] http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html

Thanks,
-- 
Pino
Author: Pino Toscano <pino@debian.org>
Description: accept4 test: skip EADDRNOTAVAIL connect errors
 In the configure test for accept4, skip also the EADDRNOTAVAIL errno of
 connect in the child, which can happen when trying to connect while the
 parent is bind'ing the socket.
Last-Update: 2013-07-05

--- a/configure.in
+++ b/configure.in
@@ -938,7 +938,7 @@ cleanup_failure2:
 
         while(connect(fd, (struct sockaddr *) &loc,
                       sizeof(struct sockaddr_un)) == -1 &&
-              (errno==ENOENT || errno==ECONNREFUSED))
+              (errno==ENOENT || errno==ECONNREFUSED || errno==EADDRNOTAVAIL))
             ;
 
         close(fd);

Reply to: