Mercurial > ecos
diff packages/net/tcpip/current/src/lib/select.c @ 112:02ea4320376c ecos-sw-2000-07-21
Merge from eCos master repository on 2000-07-21-21:01:39-BST
| author | jlarmour |
|---|---|
| date | Fri, 21 Jul 2000 21:34:11 +0000 |
| parents | ced4577552cd |
| children | 0c2b7be0d798 |
line wrap: on
line diff
--- a/packages/net/tcpip/current/src/lib/select.c +++ b/packages/net/tcpip/current/src/lib/select.c @@ -139,20 +139,19 @@ static int return 0; } flag = cyg_flag_timed_wait(&select_flag, wait_flag, - CYG_FLAG_WAITMODE_OR|CYG_FLAG_WAITMODE_CLR, + CYG_FLAG_WAITMODE_OR, then); } else { // Wait forever (until something happens) flag = cyg_flag_wait(&select_flag, wait_flag, - CYG_FLAG_WAITMODE_OR|CYG_FLAG_WAITMODE_CLR); + CYG_FLAG_WAITMODE_OR); } if (flag & SELECT_ABORT) { errno = EINTR; return -1; } if (!flag) { - errno = ETIMEDOUT; - return -1; + return 0; // meaning no activity, ergo timeout occurred } } errno = ENOSYS; @@ -179,7 +178,8 @@ selwakeup(struct selinfo *info) cyg_scheduler_lock(); // Need this test to be indivisible if (cyg_flag_waiting(&select_flag)) { // Signal any threads doing a 'select()' that I/O may be possible - cyg_flag_setbits(&select_flag, SELECT_WAKE); + cyg_flag_setbits(&select_flag, SELECT_WAKE); + cyg_flag_maskbits(&select_flag, 0 ); // clear all } cyg_scheduler_unlock(); } @@ -217,6 +217,7 @@ cyg_select_abort(void) if (cyg_flag_waiting(&select_flag)) { // Signal any threads doing a 'select()' that I/O may be possible cyg_flag_setbits(&select_flag, SELECT_ABORT); + cyg_flag_maskbits(&select_flag, 0 ); // clear all } cyg_scheduler_unlock(); }
