bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#15075: 24.3.50; Infinite loop when closing some connections


From: Lars Magne Ingebrigtsen
Subject: bug#15075: 24.3.50; Infinite loop when closing some connections
Date: Mon, 12 Aug 2013 18:04:56 +0200
User-agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3.50 (gnu/linux)

This is what's hanging.  If we get any other errors than EIO, EAGAIN or
EWOULDBLOCK, then we infloop here.  And we get EBADF, so this infloops.

          /* Read data from the process, until we exhaust it.  */
          while (wait_proc->infd >= 0)
            {
              int nread = read_process_output (proc, wait_proc->infd);

              if (nread == 0)
                break;

              if (nread > 0)
                got_some_input = read_some_bytes = 1;
              else if (nread == -1 && (errno == EIO || errno == EAGAIN))
                break;
#ifdef EWOULDBLOCK
              else if (nread == -1 && EWOULDBLOCK == errno)
                break;
#endif
            }

I'm guessing that something is supposed to set wait_proc->infd something
smaller than zero somewhere if a serious error happens.

Yup:

(gdb) print wait_proc->open_fd
$12 = {-1, -1, -1, -1, -1, -1}
(gdb) print wait_proc->infd   
$13 = 21

And this looks like the likely culprit:

-      p->infd  = -1;
-      p->outfd = -1;
+  for (i = 0; i < PROCESS_OPEN_FDS; i++)
+    close_process_fd (&p->open_fd[i]);

So there's some disagreement about what's saying whether sockets are
open or not, and if the closing happens at the wrong time, we infloop.

-- 
(domestic pets only, the antidote for overdose, milk.)
  No Gnus T-Shirt for sale: http://ingebrigtsen.no/no.php
  and http://lars.ingebrigtsen.no/2013/08/twenty-years-of-september.html





reply via email to

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