summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorClaudio Bley <claudio.bley@gmail.com>2013-02-22 18:00:14 +0200
committerEli Zaretskii <eliz@gnu.org>2013-02-22 18:00:14 +0200
commitd78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb (patch)
tree20bfdce6a16820e5577f44f7be3d8afa40289912 /src
parent29bb19dc10d3bd1a79150ff87f8f6a773d894654 (diff)
Don't call 'select' from emacs_gnutls_pull.
src/w32.c (emacs_gnutls_pull): Don't call 'select', and don't loop. This avoids warning messages reported as part of Bug#13546.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/w32.c41
2 files changed, 15 insertions, 31 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index ff45c4b2a83..639e0054ebe 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-22 Claudio Bley <claudio.bley@gmail.com>
+
+ * w32.c (emacs_gnutls_pull): Don't call 'select', and don't loop.
+ This avoids warning messages reported as part of Bug#13546.
+
2013-02-21 Ken Brown <kbrown@cornell.edu>
* sheap.c (report_sheap_usage): Fix arguments of message1_no_log.
diff --git a/src/w32.c b/src/w32.c
index ed86b1238ae..5011642adf2 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -7822,47 +7822,26 @@ serial_configure (struct Lisp_Process *p, Lisp_Object contact)
ssize_t
emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz)
{
- int n, sc, err;
+ int n, err;
SELECT_TYPE fdset;
EMACS_TIME timeout;
struct Lisp_Process *process = (struct Lisp_Process *)p;
int fd = process->infd;
- for (;;)
- {
- n = sys_read (fd, (char*)buf, sz);
-
- if (n >= 0)
- return n;
-
- err = errno;
+ n = sys_read (fd, (char*)buf, sz);
- if (err == EWOULDBLOCK)
- {
- /* Set a small timeout. */
- timeout = make_emacs_time (1, 0);
- FD_ZERO (&fdset);
- FD_SET ((int)fd, &fdset);
-
- /* Use select with the timeout to poll the selector. */
- sc = select (fd + 1, &fdset, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
- &timeout, NULL);
+ if (n >= 0)
+ return n;
- if (sc > 0)
- continue; /* Try again. */
+ err = errno;
- /* Translate the WSAEWOULDBLOCK alias EWOULDBLOCK to EAGAIN.
- Also accept select return 0 as an indicator to EAGAIN. */
- if (sc == 0 || errno == EWOULDBLOCK)
- err = EAGAIN;
- else
- err = errno; /* Other errors are just passed on. */
- }
+ /* Translate the WSAEWOULDBLOCK alias EWOULDBLOCK to EAGAIN. */
+ if (err == EWOULDBLOCK)
+ err = EAGAIN;
- emacs_gnutls_transport_set_errno (process->gnutls_state, err);
+ emacs_gnutls_transport_set_errno (process->gnutls_state, err);
- return -1;
- }
+ return -1;
}
ssize_t