You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/10/01 17:52:54 UTC
svn commit: r820696 -
/commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c
Author: mturk
Date: Thu Oct 1 15:52:54 2009
New Revision: 820696
URL: http://svn.apache.org/viewvc?rev=820696&view=rev
Log:
Use infinite timeout if not set for full-write routines
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c?rev=820696&r1=820695&r2=820696&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/fsysio.c Thu Oct 1 15:52:54 2009
@@ -277,6 +277,23 @@
return errno;
}
+static int wait_for_io(acr_file_t *f, int for_read)
+{
+ int rc, timeout = f->timeout ? (int)(f->timeout / 1000) : -1;
+ f->ppoll.fd = f->fd;
+ f->ppoll.events = for_read ? POLLIN : POLLOUT;
+
+ do {
+ rc = poll(&f->ppoll, 1, timeout);
+ } while (rc == -1 && errno == EINTR);
+ if (rc == 0)
+ return ACR_TIMEUP;
+ else if (rc > 0)
+ return ACR_SUCCESS;
+ else
+ return errno;
+}
+
ACR_IO_EXPORT_DECLARE(jint, FileSystem, lock0)(ACR_JNISTDARGS,
jint file,
jint type)
@@ -1260,9 +1277,8 @@
wb = bb + po;
do {
wr = r_write(f->fd, wb, cs);
- if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) &&
- f->timeout != 0) {
- if ((rc = wait_for_io_or_timeout(f, 0)) == 0) {
+ if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+ if ((rc = wait_for_io(f, 0)) == 0) {
wr = r_write(f->fd, wb, cs);
}
else if (rc != ACR_TIMEUP)
@@ -1332,9 +1348,8 @@
pb = pb + po;
do {
wr = r_write(f->fd, pb, cs);
- if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) &&
- f->timeout != 0) {
- if ((rc = wait_for_io_or_timeout(f, 0)) == 0) {
+ if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+ if ((rc = wait_for_io(f, 0)) == 0) {
wr = r_write(f->fd, pb, cs);
}
else if (rc != ACR_TIMEUP)
@@ -1408,9 +1423,8 @@
pb = pb + po;
do {
wr = r_write(f->fd, pb, cs);
- if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) &&
- f->timeout != 0) {
- if ((rc = wait_for_io_or_timeout(f, 0)) == 0) {
+ if (wr == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+ if ((rc = wait_for_io(f, 0)) == 0) {
wr = r_write(f->fd, pb, cs);
}
else if (rc != ACR_TIMEUP)