diff options
| author | Claudio Bley <claudio.bley@gmail.com> | 2013-02-22 18:00:14 +0200 |
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2013-02-22 18:00:14 +0200 |
| commit | d78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb (patch) | |
| tree | 20bfdce6a16820e5577f44f7be3d8afa40289912 /src | |
| parent | 29bb19dc10d3bd1a79150ff87f8f6a773d894654 (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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/w32.c | 41 |
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 |
