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

Bug#641200: fakeroot: fakeroot-tcp vs. EINTR?



Package: fakeroot
Tags: patch
User: debian-hurd@lists.debian.org
Usertags: hurd
X-Debbugs-CC: debian-hurd@lists.debian.org
thanks

Debian GNU/Hurd folks: why do I have to specify Hurd
User/Usertags/X-Debbugs-CC, all three?  Can't this be made simpler?
(This is from
<http://www.gnu.org/software/hurd/hurd/running/debian/patch_submission.html>.)


Hi!

On Sun, 11 Sep 2011 11:55:21 +0200, I wrote:
> Debian fakeroot 1.15.1-1 (fakeroot-tcp) has problems with EINTR or
> something?
> 
>     [...]
>     ./scripts/mkinstalldirs /media/erich/home/thomas/tmp/glibc/debian/eglibc-2.13/debian/tmp-libc/usr/include
>     libfakeroot: connect: Interrupted system call
>     /usr/bin/install -c -m 644 include/limits.h /media/erich/home/thomas/tmp/glibc/debian/eglibc-2.13/debian/tmp-libc/usr/include/limits.h
>     /usr/bin/install: cannot create regular file `/media/erich/home/thomas/tmp/glibc/debian/eglibc-2.13/debian/tmp-libc/usr/include/limits.h': No such file or directory
>     make[2]: *** [/media/erich/home/thomas/tmp/glibc/debian/eglibc-2.13/debian/tmp-libc/usr/include/limits.h] Error 1
>     [...]

Yes, it has.  Manually tested, ``git am''-able patch is attached.  I
didn't check whether there are further such cases.

I built with ``DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -uc -b -d''.
``-d'' due to libacl1-dev not being available.


Grüße,
 Thomas


From bb3cfb6ddf7831d36df22697caae4589f53bcc70 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@schwinge.name>
Date: Sun, 11 Sep 2011 14:24:31 +0200
Subject: [PATCH] It is permissible for connect to fail with EINTR.

---
 communicate.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/communicate.c b/communicate.c
index 2db0a9d..02b258a 100644
--- a/communicate.c
+++ b/communicate.c
@@ -476,8 +476,13 @@ static void open_comm_sd(void)
   if (fcntl(comm_sd, F_SETFD, FD_CLOEXEC) < 0)
     fail("fcntl(F_SETFD, FD_CLOEXEC)");
 
-  if (connect(comm_sd, get_addr(), sizeof (struct sockaddr_in)) < 0)
-    fail("connect");
+  while (1) {
+    if (connect(comm_sd, get_addr(), sizeof (struct sockaddr_in)) < 0) {
+      if (errno != EINTR)
+        fail("connect");
+    } else
+      break;
+  }
 }
 
 void lock_comm_sd(void)
-- 
1.7.5.4

Attachment: pgpjod7NEV9tG.pgp
Description: PGP signature


Reply to: