Browse Source

If we get a restart message in avalon_gets still check if there's a receive message to parse first without a timeout before returning AVA_GETS_RESTART.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
5e3474b0c8
  1. 12
      driver-avalon.c

12
driver-avalon.c

@ -209,9 +209,17 @@ static inline int avalon_gets(int fd, uint8_t *buf, struct thr_info *thr,
ssize_t ret = 0; ssize_t ret = 0;
while (true) { while (true) {
struct timeval timeout = {0, 100000}; struct timeval timeout;
fd_set rd; fd_set rd;
timeout.tv_sec = 0;
/* If we get a restart message, still check if there's
* anything in the buffer waiting to be parsed */
if (unlikely(thr->work_restart))
timeout.tv_usec = 0;
else
timeout.tv_usec = 100000;
FD_ZERO(&rd); FD_ZERO(&rd);
FD_SET(fd, &rd); FD_SET(fd, &rd);
ret = select(fd + 1, &rd, NULL, NULL, &timeout); ret = select(fd + 1, &rd, NULL, NULL, &timeout);
@ -232,7 +240,7 @@ static inline int avalon_gets(int fd, uint8_t *buf, struct thr_info *thr,
continue; continue;
} }
if (thr->work_restart) { if (unlikely(thr->work_restart)) {
applog(LOG_DEBUG, "Avalon: Work restart"); applog(LOG_DEBUG, "Avalon: Work restart");
return AVA_GETS_RESTART; return AVA_GETS_RESTART;
} }

Loading…
Cancel
Save