On Thu, Feb 24, 2000 at 08:05:25AM -0500, Joshua N Pritikin wrote:
> On Thu, Feb 24, 2000 at 10:13:23AM +0100, [EMAIL PROTECTED] wrote:
> > > Maybe you can get a C-level stack trace?
> >
> > I attach the debug session log. I forced program termination by a
> > conditional dump() in a $SIG{__WARN__} hook. The calling condition was
> > "Event.pm" in the message.
> 
> I am able to reproduce the problem by using select() instead of poll().

Here's a fix:

==== //depot/D/Event/c/unix_io.c#26 - /cache/D/Event/c/unix_io.c ====
--- /tmp/tmp.15319.0    Thu Feb 24 08:44:29 2000
+++ /cache/D/Event/c/unix_io.c  Thu Feb 24 08:43:46 2000
@@ -45,8 +45,8 @@
 }
 
 /************************************************* POLL */
-#if defined(HAS_POLL) && !PE_IO_WAIT
-#define PE_IO_WAIT 1
+#if defined(HAS_POLL) && !PE_SYS_IO
+#define PE_SYS_IO 1
 
 static struct pollfd *Pollfd=0;
 static int pollMax=0;
@@ -125,9 +125,9 @@
     }
     ev = (pe_io*) IOWatch.next->self;
     while (ev) {
+       pe_io *next_ev = (pe_io*) ev->ioring.next->self;
        STRLEN n_a;
        int xref = ev->xref;
-       pe_io *next_ev = (pe_io*) ev->ioring.next->self;
        if (xref >= 0) {
            int got = 0;
            int mask = Pollfd[xref].revents;
@@ -152,8 +152,8 @@
 
 
 /************************************************* SELECT */
-#if defined(HAS_SELECT) && !PE_IO_WAIT
-#define PE_IO_WAIT 1
+#if defined(HAS_SELECT) && !PE_SYS_IO
+#define PE_SYS_IO 1
 
 static int Nfds;
 static fd_set Rfds, Wfds, Efds;
@@ -246,6 +246,7 @@
     }
     ev = IOWatch.next->self;
     while (ev) {
+       pe_io *next_ev = (pe_io*) ev->ioring.next->self;
        int fd = ev->fd;
        if (fd >= 0) {
            int got = 0;
@@ -259,7 +260,7 @@
              if (--ret == 0) { ev=0; continue; }
            */
        }
-       ev = ev->ioring.next->self;
+       ev = next_ev;
     }
 }
 #endif /*HAS_SELECT*/

-- 
"May the best description of competition prevail."
          via, but not speaking for Deutsche Bank

Reply via email to