aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClaudio Bley2013-02-22 18:00:14 +0200
committerEli Zaretskii2013-02-22 18:00:14 +0200
commitd78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb (patch)
tree20bfdce6a16820e5577f44f7be3d8afa40289912 /src
parent29bb19dc10d3bd1a79150ff87f8f6a773d894654 (diff)
downloademacs-d78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb.tar.gz
emacs-d78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb.zip
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 @@
12013-02-22 Claudio Bley <claudio.bley@gmail.com>
2
3 * w32.c (emacs_gnutls_pull): Don't call 'select', and don't loop.
4 This avoids warning messages reported as part of Bug#13546.
5
12013-02-21 Ken Brown <kbrown@cornell.edu> 62013-02-21 Ken Brown <kbrown@cornell.edu>
2 7
3 * sheap.c (report_sheap_usage): Fix arguments of message1_no_log. 8 * 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)
7822ssize_t 7822ssize_t
7823emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz) 7823emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz)
7824{ 7824{
7825 int n, sc, err; 7825 int n, err;
7826 SELECT_TYPE fdset; 7826 SELECT_TYPE fdset;
7827 EMACS_TIME timeout; 7827 EMACS_TIME timeout;
7828 struct Lisp_Process *process = (struct Lisp_Process *)p; 7828 struct Lisp_Process *process = (struct Lisp_Process *)p;
7829 int fd = process->infd; 7829 int fd = process->infd;
7830 7830
7831 for (;;) 7831 n = sys_read (fd, (char*)buf, sz);
7832 {
7833 n = sys_read (fd, (char*)buf, sz);
7834 7832
7835 if (n >= 0) 7833 if (n >= 0)
7836 return n; 7834 return n;
7837 7835
7838 err = errno; 7836 err = errno;
7839 7837
7840 if (err == EWOULDBLOCK) 7838 /* Translate the WSAEWOULDBLOCK alias EWOULDBLOCK to EAGAIN. */
7841 { 7839 if (err == EWOULDBLOCK)
7842 /* Set a small timeout. */ 7840 err = EAGAIN;
7843 timeout = make_emacs_time (1, 0);
7844 FD_ZERO (&fdset);
7845 FD_SET ((int)fd, &fdset);
7846
7847 /* Use select with the timeout to poll the selector. */
7848 sc = select (fd + 1, &fdset, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
7849 &timeout, NULL);
7850
7851 if (sc > 0)
7852 continue; /* Try again. */
7853
7854 /* Translate the WSAEWOULDBLOCK alias EWOULDBLOCK to EAGAIN.
7855 Also accept select return 0 as an indicator to EAGAIN. */
7856 if (sc == 0 || errno == EWOULDBLOCK)
7857 err = EAGAIN;
7858 else
7859 err = errno; /* Other errors are just passed on. */
7860 }
7861 7841
7862 emacs_gnutls_transport_set_errno (process->gnutls_state, err); 7842 emacs_gnutls_transport_set_errno (process->gnutls_state, err);
7863 7843
7864 return -1; 7844 return -1;
7865 }
7866} 7845}
7867 7846
7868ssize_t 7847ssize_t