diff options
Diffstat (limited to 'src/NextEvent.c')
-rw-r--r-- | src/NextEvent.c | 222 |
1 files changed, 111 insertions, 111 deletions
diff --git a/src/NextEvent.c b/src/NextEvent.c index 75e74ad..5e96173 100644 --- a/src/NextEvent.c +++ b/src/NextEvent.c @@ -167,19 +167,19 @@ typedef struct { struct timeval new_time; struct timeval time_spent; struct timeval max_wait_time; -#ifndef USE_POLL - struct timeval *wait_time_ptr; -#else +#ifdef USE_POLL int poll_wait; +#else + struct timeval *wait_time_ptr; #endif } wait_times_t, *wait_times_ptr_t; static struct timeval zero_time = { 0 , 0}; -#ifndef USE_POLL -static fd_set zero_fd; -#else +#ifdef USE_POLL #define X_BLOCK -1 #define X_DONT_BLOCK 0 +#else +static fd_set zero_fd; #endif static void InitTimes ( @@ -192,38 +192,38 @@ static void InitTimes ( FIXUP_TIMEVAL(wt->cur_time); wt->start_time = wt->cur_time; if(howlong == NULL) { /* special case for ever */ -#ifndef USE_POLL - wt->wait_time_ptr = NULL; -#else +#ifdef USE_POLL wt->poll_wait = X_BLOCK; +#else + wt->wait_time_ptr = NULL; #endif } else { /* block until at most */ wt->max_wait_time.tv_sec = (time_t) (*howlong/1000); wt->max_wait_time.tv_usec = (suseconds_t) ((*howlong %1000)*1000); -#ifndef USE_POLL - wt->wait_time_ptr = &wt->max_wait_time; -#else +#ifdef USE_POLL wt->poll_wait = (int) *howlong; +#else + wt->wait_time_ptr = &wt->max_wait_time; #endif } } else { /* don't block */ wt->max_wait_time = zero_time; -#ifndef USE_POLL - wt->wait_time_ptr = &wt->max_wait_time; -#else +#ifdef USE_POLL wt->poll_wait = X_DONT_BLOCK; +#else + wt->wait_time_ptr = &wt->max_wait_time; #endif } } typedef struct { -#ifndef USE_POLL - fd_set rmask, wmask, emask; - int nfds; -#else +#ifdef USE_POLL struct pollfd* fdlist; struct pollfd* stack; int fdlistlen, num_dpys; +#else + fd_set rmask, wmask, emask; + int nfds; #endif } wait_fds_t, *wait_fds_ptr_t; @@ -235,20 +235,7 @@ static void InitFds ( { int ii; app->rebuild_fdlist = FALSE; -#ifndef USE_POLL - wf->nfds = app->fds.nfds; - if( !ignoreInputs ) { - wf->rmask = app->fds.rmask; - wf->wmask = app->fds.wmask; - wf->emask = app->fds.emask; - } else - wf->rmask = wf->wmask = wf->emask = zero_fd; - - if (!ignoreEvents) - for (ii = 0; ii < app->count; ii++) { - FD_SET (ConnectionNumber(app->list[ii]), &wf->rmask); - } -#else +#ifdef USE_POLL #ifndef POLLRDNORM #define POLLRDNORM 0 #endif @@ -315,6 +302,19 @@ static void InitFds ( fdlp++; } } +#else + wf->nfds = app->fds.nfds; + if( !ignoreInputs ) { + wf->rmask = app->fds.rmask; + wf->wmask = app->fds.wmask; + wf->emask = app->fds.emask; + } else + wf->rmask = wf->wmask = wf->emask = zero_fd; + + if (!ignoreEvents) + for (ii = 0; ii < app->count; ii++) { + FD_SET (ConnectionNumber(app->list[ii]), &wf->rmask); + } #endif } @@ -326,24 +326,24 @@ static void AdjustTimes ( wait_times_ptr_t wt) { if (app->timerQueue != NULL && !ignoreTimers && block) { -#ifndef USE_POLL +#ifdef USE_POLL if (IS_AFTER (wt->cur_time, app->timerQueue->te_timer_value)) { TIMEDELTA (wt->wait_time, app->timerQueue->te_timer_value, wt->cur_time); if (howlong == NULL || IS_AFTER (wt->wait_time, wt->max_wait_time)) - wt->wait_time_ptr = &wt->wait_time; + wt->poll_wait = (int) (wt->wait_time.tv_sec * 1000 + wt->wait_time.tv_usec / 1000); else - wt->wait_time_ptr = &wt->max_wait_time; + wt->poll_wait = (int) (wt->max_wait_time.tv_sec * 1000 + wt->max_wait_time.tv_usec / 1000); } else - wt->wait_time_ptr = &zero_time; + wt->poll_wait = X_DONT_BLOCK; #else if (IS_AFTER (wt->cur_time, app->timerQueue->te_timer_value)) { TIMEDELTA (wt->wait_time, app->timerQueue->te_timer_value, wt->cur_time); if (howlong == NULL || IS_AFTER (wt->wait_time, wt->max_wait_time)) - wt->poll_wait = (int) (wt->wait_time.tv_sec * 1000 + wt->wait_time.tv_usec / 1000); + wt->wait_time_ptr = &wt->wait_time; else - wt->poll_wait = (int) (wt->max_wait_time.tv_sec * 1000 + wt->max_wait_time.tv_usec / 1000); + wt->wait_time_ptr = &wt->max_wait_time; } else - wt->poll_wait = X_DONT_BLOCK; + wt->wait_time_ptr = &zero_time; #endif } } @@ -353,11 +353,11 @@ static int IoWait ( wait_times_ptr_t wt, wait_fds_ptr_t wf) { -#ifndef USE_POLL +#ifdef USE_POLL + return poll (wf->fdlist, (nfds_t) wf->fdlistlen, wt->poll_wait); +#else return Select (wf->nfds, &wf->rmask, &wf->wmask, &wf->emask, wt->wait_time_ptr); -#else - return poll (wf->fdlist, (nfds_t) wf->fdlistlen, wt->poll_wait); #endif } @@ -373,7 +373,61 @@ static void FindInputs ( { InputEvent *ep; int ii; -#ifndef USE_POLL /* { check ready file descriptors block */ +#ifdef USE_POLL /* { check ready file descriptors block */ + struct pollfd* fdlp; + + *dpy_no = -1; + *found_input = False; + + if (!ignoreEvents) { + fdlp = wf->fdlist; + for (ii = 0; ii < wf->num_dpys; ii++, fdlp++) { + if (*dpy_no == -1 && fdlp->revents & (POLLIN|POLLHUP|POLLERR) && +#ifdef XTHREADS + !(fdlp->revents & POLLNVAL) && +#endif + XEventsQueued (app->list[ii], QueuedAfterReading)) { + *dpy_no = ii; + break; + } + } + } + + if (!ignoreInputs) { + fdlp = &wf->fdlist[wf->num_dpys]; + for (ii = wf->num_dpys; ii < wf->fdlistlen; ii++, fdlp++) { + XtInputMask condition = 0; + if (fdlp->revents) { + if (fdlp->revents & (XPOLL_READ|POLLHUP|POLLERR) +#ifdef XTHREADS + && !(fdlp->revents & POLLNVAL) +#endif + ) + condition = XtInputReadMask; + if (fdlp->revents & XPOLL_WRITE) + condition |= XtInputWriteMask; + if (fdlp->revents & XPOLL_EXCEPT) + condition |= XtInputExceptMask; + } + if (condition) { + *found_input = True; + for (ep = app->input_list[fdlp->fd]; ep; ep = ep->ie_next) + if (condition & ep->ie_condition) { + InputEvent *oq; + /* make sure this input isn't already marked outstanding */ + for (oq = app->outstandingQueue; oq; oq = oq->ie_oq) + if (oq == ep) + break; + if (!oq) + { + ep->ie_oq = app->outstandingQueue; + app->outstandingQueue = ep; + } + } + } + } + } +#else /* }{ */ #ifdef XTHREADS fd_set rmask; #endif @@ -452,60 +506,6 @@ static void FindInputs ( } ENDILOOP: ; } /* endfor */ -#else /* }{ */ - struct pollfd* fdlp; - - *dpy_no = -1; - *found_input = False; - - if (!ignoreEvents) { - fdlp = wf->fdlist; - for (ii = 0; ii < wf->num_dpys; ii++, fdlp++) { - if (*dpy_no == -1 && fdlp->revents & (POLLIN|POLLHUP|POLLERR) && -#ifdef XTHREADS - !(fdlp->revents & POLLNVAL) && -#endif - XEventsQueued (app->list[ii], QueuedAfterReading)) { - *dpy_no = ii; - break; - } - } - } - - if (!ignoreInputs) { - fdlp = &wf->fdlist[wf->num_dpys]; - for (ii = wf->num_dpys; ii < wf->fdlistlen; ii++, fdlp++) { - XtInputMask condition = 0; - if (fdlp->revents) { - if (fdlp->revents & (XPOLL_READ|POLLHUP|POLLERR) -#ifdef XTHREADS - && !(fdlp->revents & POLLNVAL) -#endif - ) - condition = XtInputReadMask; - if (fdlp->revents & XPOLL_WRITE) - condition |= XtInputWriteMask; - if (fdlp->revents & XPOLL_EXCEPT) - condition |= XtInputExceptMask; - } - if (condition) { - *found_input = True; - for (ep = app->input_list[fdlp->fd]; ep; ep = ep->ie_next) - if (condition & ep->ie_condition) { - InputEvent *oq; - /* make sure this input isn't already marked outstanding */ - for (oq = app->outstandingQueue; oq; oq = oq->ie_oq) - if (oq == ep) - break; - if (!oq) - { - ep->ie_oq = app->outstandingQueue; - app->outstandingQueue = ep; - } - } - } - } - } #endif /* } */ } @@ -664,25 +664,25 @@ WaitLoop: } if (block) { -#ifndef USE_POLL - if (wt.wait_time_ptr == NULL) -#else +#ifdef USE_POLL if (wt.poll_wait == X_BLOCK) +#else + if (wt.wait_time_ptr == NULL) #endif continue; X_GETTIMEOFDAY (&wt.new_time); FIXUP_TIMEVAL (wt.new_time); TIMEDELTA (wt.time_spent, wt.new_time, wt.cur_time); wt.cur_time = wt.new_time; -#ifndef USE_POLL - if (IS_AFTER (wt.time_spent, *wt.wait_time_ptr)) { - TIMEDELTA (wt.wait_time, *wt.wait_time_ptr, wt.time_spent); - wt.wait_time_ptr = &wt.wait_time; +#ifdef USE_POLL + if ((wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000) < wt.poll_wait) { + wt.poll_wait -= (int)(wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000); continue; } else #else - if ((wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000) < wt.poll_wait) { - wt.poll_wait -= (int)(wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000); + if (IS_AFTER (wt.time_spent, *wt.wait_time_ptr)) { + TIMEDELTA (wt.wait_time, *wt.wait_time_ptr, wt.time_spent); + wt.wait_time_ptr = &wt.wait_time; continue; } else #endif @@ -1021,15 +1021,15 @@ XtInputId XtAppAddInput( sptr->ie_next = app->input_list[source]; app->input_list[source] = sptr; -#ifndef USE_POLL +#ifdef USE_POLL + if (sptr->ie_next == NULL) + app->fds.nfds++; +#else if (condition & XtInputReadMask) FD_SET(source, &app->fds.rmask); if (condition & XtInputWriteMask) FD_SET(source, &app->fds.wmask); if (condition & XtInputExceptMask) FD_SET(source, &app->fds.emask); if (app->fds.nfds < (source+1)) app->fds.nfds = source+1; -#else - if (sptr->ie_next == NULL) - app->fds.nfds++; #endif app->input_count++; app->rebuild_fdlist = TRUE; |