Changeset: e81d7ace94c7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e81d7ace94c7
Modified Files:
NT/rules.msc
common/stream/stream.c
tools/merovingian/daemon/merovingian.c
Branch: default
Log Message:
Merge with Oct2014 branch.
diffs (131 lines):
diff --git a/NT/rules.msc b/NT/rules.msc
--- a/NT/rules.msc
+++ b/NT/rules.msc
@@ -195,10 +195,11 @@ libr_LIBDEP = R.lib
LIBR = c:\Program Files\R\R-3.1.0
!ENDIF
!IFDEF BITS32
-libr_DLL=$(LIBR)\bin\i386\R.dll
+RDLL=bin\i386\R.dll
!ELSE
-libr_DLL=$(LIBR)\bin\x64\R.dll
+RDLL=bin\x64\R.dll
!ENDIF
+libr_DLL=$(LIBR)\$(RDLL)
libr_LIBS = $(libr_LIBDEP)
libr_CFLAGS = -DHAVE_LIBR "-I$(LIBR)\include"
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -1676,24 +1676,53 @@ socket_read(stream *s, void *buf, size_t
if (size == 0)
return 0;
- do {
- errno = 0;
-#ifdef NATIVE_WIN32
- if (size > INT_MAX)
- size = elmsize * (INT_MAX / elmsize);
+#ifdef _MSC_VER
+ /* recv only takes an int parameter, and read does not accept
+ * sockets */
+ if (size > INT_MAX)
+ size = elmsize * (INT_MAX / elmsize);
+#endif
+ for (;;) {
+ if (s->timeout) {
+ struct timeval tv;
+ fd_set fds;
+ int ret;
+
+ errno = 0;
+ FD_ZERO(&fds);
+ FD_SET(s->stream_data.s, &fds);
+ tv.tv_sec = s->timeout / 1000;
+ tv.tv_usec = (s->timeout % 1000) * 1000;
+ ret = select(
+#ifdef _MSC_VER
+ 0, /* ignored on Windows */
+#else
+ s->stream_data.s + 1,
+#endif
+ &fds, NULL, NULL, &tv);
+ if (s->timeout_func && (*s->timeout_func)()) {
+ s->errnr = MNSTR_TIMEOUT;
+ return -1;
+ }
+ if (ret == -1) {
+ s->errnr = MNSTR_READ_ERROR;
+ return -1;
+ }
+ if (ret == 0)
+ continue;
+ assert(ret == 1);
+ assert(FD_ISSET(s->stream_data.s, &fds));
+ }
+#ifdef _MSC_VER
nr = recv(s->stream_data.s, buf, (int) size, 0);
#else
nr = read(s->stream_data.s, buf, size);
#endif
- } while (nr == -1 && s->timeout > 0 &&
- (errno == EAGAIN || errno == EWOULDBLOCK) &&
- s->timeout_func && !(*s->timeout_func)());
- if (nr < 0) {
- if (s->timeout > 0 && (errno == EAGAIN || errno == EWOULDBLOCK))
- s->errnr = MNSTR_TIMEOUT;
- else
+ if (nr == -1) {
s->errnr = MNSTR_READ_ERROR;
- return -1;
+ return -1;
+ }
+ break;
}
if (nr == 0)
return 0; /* end of file */
@@ -1710,12 +1739,7 @@ socket_read(stream *s, void *buf, size_t
ssize_t n;
n = socket_read(s, (char *) buf + nr, 1, (size_t) (size - nr));
if (n < 0) {
- if (s->errnr == MNSTR_TIMEOUT) {
- /* ignore timeout */
- s->errnr = MNSTR_NO__ERROR;
- continue;
- }
- /* some other read error is serious */
+ s->errnr = MNSTR_READ_ERROR;
return -1;
}
if (n == 0) /* unexpected end of file */
@@ -1761,8 +1785,6 @@ socket_update_timeout(stream *s)
tv.tv_sec = s->timeout / 1000;
tv.tv_usec = (s->timeout % 1000) * 1000;
/* cast to char * for Windows, no harm on "normal" systems */
- if (s->access == ST_READ)
- (void) setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv,
(socklen_t) sizeof(tv));
if (s->access == ST_WRITE)
(void) setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv,
(socklen_t) sizeof(tv));
}
diff --git a/tools/merovingian/daemon/merovingian.c
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -295,7 +295,7 @@ terminateProcess(void *p)
free(dbname);
return;
default:
- Mfprintf(stderr, "unknown state: %d",
(int)stats->state);
+ Mfprintf(stderr, "unknown state: %d\n",
(int)stats->state);
msab_freeStatus(&stats);
free(dbname);
return;
@@ -347,7 +347,7 @@ terminateProcess(void *p)
free(dbname);
return;
default:
- Mfprintf(stderr, "unknown state: %d",
(int)stats->state);
+ Mfprintf(stderr, "unknown state: %d\n",
(int)stats->state);
break;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list