--- rxvt-unicode/src/iom.C 2004/01/16 22:11:09 1.8 +++ rxvt-unicode/src/iom.C 2004/01/17 14:10:40 1.10 @@ -1,6 +1,6 @@ /* iom.C -- generic I/O multiplexor - Copyright (C) 2003 Marc Lehmann + Copyright (C) 2003, 2004 Marc Lehmann This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,8 +17,6 @@ Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "../config.h" - #include #include #include @@ -31,12 +29,30 @@ // TSTAMP_MAX must still fit into a positive struct timeval #define TSTAMP_MAX (double)(1UL<<31) +// this is a dummy time watcher to ensure that the first +// time watcher is _always_ valid, this gets rid of a lot +// of null-pointer-checks +// (must come _before_ iom is being defined) +static struct tw0 : time_watcher { + void cb (time_watcher &w) + { + // should never get called + // reached end-of-time, or tstamp has a bogus definition, + // or compiler initilization order broken, or somethine else :) + abort (); + } + + tw0() + : time_watcher (this, &tw0::cb) + { } +} tw0; + tstamp NOW; static bool iom_valid; io_manager iom; template -void io_manager::reg (watcher *w, simplevec &queue) +void io_manager::reg (watcher *w, io_manager_vec &queue) { if (!iom_valid) abort (); @@ -49,7 +65,7 @@ } template -void io_manager::unreg (watcher *w, simplevec &queue) +void io_manager::unreg (watcher *w, io_manager_vec &queue) { if (!iom_valid) return; @@ -144,7 +160,7 @@ } break; } - else if (next->at >= 0) + else { unreg (next); next->call (*next); @@ -169,7 +185,7 @@ int fds = 0; - for (io_watcher **i = iow.end (); i-- > iow.begin (); ) + for (io_manager_vec::iterator i = iow.end (); i-- > iow.begin (); ) if (*i) { if ((*i)->events & EVENT_READ ) FD_SET ((*i)->fd, &rfd); @@ -226,22 +242,6 @@ } } -// this is a dummy time watcher to ensure that the first -// time watcher is _always_ valid, this gets rid of a lot -// of null-pointer-checks -static struct tw0 : time_watcher { - void cb (time_watcher &w) - { - // should never get called - // reached end-of-time, or tstamp has a bogus definition :) - abort (); - } - - tw0() - : time_watcher (this, &tw0::cb) - { } -} tw0; - io_manager::io_manager () { iom_valid = true; @@ -250,6 +250,7 @@ set_now (); tw0.start (TSTAMP_MAX); + printf ("abort, %f but inly on %f\n", NOW, tw0.at); #endif }