[kaffe] CVS kaffe (dalibor): Fixed jthreadedRecvfrom timeout handling
Kaffe CVS
cvs-commits at kaffe.org
Thu Sep 9 17:38:22 PDT 2004
PatchSet 5150
Date: 2004/09/10 00:34:21
Author: dalibor
Branch: HEAD
Tag: (none)
Log:
Fixed jthreadedRecvfrom timeout handling
2004-09-09 Noa Resare <noa at resare.com>
* kaffe/kaffevm/systems/unix-pthreads/syscalls.c:
(jthreadedRecvfrom) fixed timeout handling
Members:
ChangeLog:1.2706->1.2707
kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.19->1.20
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2706 kaffe/ChangeLog:1.2707
--- kaffe/ChangeLog:1.2706 Thu Sep 9 20:33:17 2004
+++ kaffe/ChangeLog Fri Sep 10 00:34:21 2004
@@ -1,3 +1,8 @@
+2004-09-09 Noa Resare <noa at resare.com>
+
+ * kaffe/kaffevm/systems/unix-pthreads/syscalls.c:
+ (jthreadedRecvfrom) fixed timeout handling
+
2004-09-09 Dalibor Topic <robilad at kaffe.org>
* libraries/javalib/rebuildLib.in: Increased memory available
Index: kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c
diff -u kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.19 kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.20
--- kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c:1.19 Thu Aug 19 09:51:00 2004
+++ kaffe/kaffe/kaffevm/systems/unix-pthreads/syscalls.c Fri Sep 10 00:34:24 2004
@@ -19,6 +19,9 @@
#include "jsyscall.h"
#include "jsignal.h"
#include "nets.h"
+#if defined(HAVE_SYS_POLL_H)
+#include <sys/poll.h>
+#endif
#if defined(HAVE_SYS_WAIT_H)
#include <sys/wait.h>
#endif
@@ -34,7 +37,7 @@
#define BREAK_IF_LATE(deadline, timeout) \
if (timeout != NOTIMEOUT) { \
if (currentTime() >= deadline) { \
- errno = EINTR; \
+ errno = ETIMEDOUT; \
break; \
} \
}
@@ -614,7 +617,13 @@
{
int r;
jlong deadline = 0;
+ int fd_flags;
+ int poll_timeout;
+
+ struct pollfd sp = {fd, POLLIN|POLLPRI, 0};
+ fd_flags = fcntl(fd, F_GETFL);
+ fcntl(fd, F_SETFL, fd_flags|O_NONBLOCK);
SET_DEADLINE(deadline, timeout)
for (;;) {
r = recvfrom(fd, buf, len, flags, from, fromlen);
@@ -623,8 +632,13 @@
break;
}
IGNORE_EINTR(r)
+ poll_timeout = deadline - currentTime();
+ if (poll_timeout > 0) {
+ poll(&sp, 1, poll_timeout);
+ }
BREAK_IF_LATE(deadline, timeout)
}
+ fcntl(fd, F_SETFL, fd_flags);
SET_RETURN_OUT(r, out, r)
return (r);
}
More information about the kaffe
mailing list