Changeset: 61364f439311 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=61364f439311 Modified Files: NT/rules.msc common/stream/stream.c tools/merovingian/daemon/merovingian.c Branch: geo Log Message:
Merge with default 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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list