Hello, Jérémie Koenig, le Fri 04 Jun 2010 14:41:34 +0200, a écrit : > On Hurd, libdebian-installer gets stuck inside the internal_di_exec() > function. This is caused by the way poll() reports end-of-file, which > cannot be portably relied on. > > The attach patch uses feof() instead of POLLHUP to detect it.
> Index: packages/libdebian-installer/src/exec.c > =================================================================== > --- packages/libdebian-installer/src/exec.c (revision 63370) > +++ packages/libdebian-installer/src/exec.c (working copy) > @@ -162,14 +162,12 @@ > { > bool exit = false; > > + /* Implementations of poll() deliver various combinations of POLLIN > and > + POLLHUP on EOF. fgets() detects it and we check with feof() below. > + References: http://www.greenend.org.uk/rjk/2001/06/poll.html */ > for (i = 0; i < pipes; i++) > { > -/* References: http://www.greenend.org.uk/rjk/2001/06/poll.html */ > -#if defined(__FreeBSD_kernel__) > - if ((pollfds[i].revents & POLLIN) && (! (pollfds[i].revents & > POLLHUP))) > -#else > - if (pollfds[i].revents & POLLIN) > -#endif > + if (pollfds[i].revents & (POLLIN | POLLHUP)) > { > while (fgets (line, sizeof (line), files[i].file) != NULL) > { > @@ -180,8 +178,8 @@ > len--; > } > files[i].handler (line, len, io_user_data); > + exit = true; > } > - exit = true; > } > } > > @@ -189,7 +187,7 @@ > continue; > > for (i = 0; i < pipes; i++) > - if (pollfds[i].revents & POLLHUP) > + if (feof(files[i].file)) > exit = true; > > if (exit) This seems simpler to me. Could BSD people check they do not have bad effects? Samuel -- To UNSUBSCRIBE, email to debian-bsd-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20100801150247.gn4...@const.famille.thibault.fr