diff options
| author | Claudio Bley | 2013-02-22 18:00:14 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2013-02-22 18:00:14 +0200 |
| commit | d78cf5edf9b4aebfc6a5821d88ba1ee3eb00aebb (patch) | |
| tree | 20bfdce6a16820e5577f44f7be3d8afa40289912 /src | |
| parent | 29bb19dc10d3bd1a79150ff87f8f6a773d894654 (diff) | |
| download | emacs-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/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 @@ | |||
| 1 | 2013-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 | |||
| 1 | 2013-02-21 Ken Brown <kbrown@cornell.edu> | 6 | 2013-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. |
| @@ -7822,47 +7822,26 @@ serial_configure (struct Lisp_Process *p, Lisp_Object contact) | |||
| 7822 | ssize_t | 7822 | ssize_t |
| 7823 | emacs_gnutls_pull (gnutls_transport_ptr_t p, void* buf, size_t sz) | 7823 | emacs_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 | ||
| 7868 | ssize_t | 7847 | ssize_t |