From: claudio.bley@gmail.com (Claudio Bley)
To: emacs-devel@gnu.org
Subject: Re: Calling 'select' from emacs_gnutls_pull
Date: Fri, 22 Feb 2013 12:15:36 +0100 [thread overview]
Message-ID: <87k3q0wqef.wl%claudio.bley@gmail.com> (raw)
In-Reply-To: <83txpcqjzs.fsf@gnu.org>
Hi.
At Sat, 16 Feb 2013 18:52:23 +0200,
Eli Zaretskii wrote:
>
> > From: Ted Zlatanov <tzz@lifelogs.com>
> > Date: Sat, 16 Feb 2013 10:55:45 -0500
> >
> > ...and there are comments accumulated over the years in that
> > neighborhood. Claudio Bley contributed much of the original code here,
> > including the piece you're referring to. The history is at
> >
> > http://comments.gmane.org/gmane.emacs.devel/136816
>
> I've (re-)read that thread, but didn't find any rationale for calling
> 'select'. Claudio, could you perhaps chime in?
That was quite some time ago and, I'm afraid, my memory fails me at
that.
Looking at the code, I cannot see a strong reason calling select
inside of emacs_gnutls_pull... Maybe it was indeed because of
performance reasons, but more likely some kind of left-over from
chasing a red herring while trying to figure out why it didn't work
sometimes.
However, applying the obvious patch:
--- >8 ---
--- src/w32.c Thu Feb 21 14:35:43 2013
+++ ../build/src/w32.c Fri Feb 22 08:32:35 2013
@@ -7837,27 +7837,9 @@
err = errno;
+ /* Translate the WSAEWOULDBLOCK alias EWOULDBLOCK to EAGAIN. */
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 (sc > 0)
- continue; /* Try again. */
-
- /* 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. */
- }
+ err = EAGAIN;
emacs_gnutls_transport_set_errno (process->gnutls_state, err);
--- >8 ---
and made a few tests using POP3 and IMAP connections over TLS and
HTTPS connections. Works good.
I also prepared a small test driver, downloading a file 33 MiByte in
size from a remote host (over VPN):
,----[ test_tls.el ]
| (require 'gnutls)
|
| (when (gnutls-available-p)
| (url-retrieve-synchronously "https://192.168.0.1/artifactory-2.4.1.zip"))
|
| (kill-emacs)
`----
Here are some numbers running emacs with "-Q --load test_tls.el" a few
times. Note, that using "--batch -Q --script test_tls.el" uses 100%
CPU and exits with an out of memory error (I assume because the GC
is never run since there is no event loop nor threads involved).
Average for with-select key over 3 runs
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 1:00 am, Monday, January 1 1601
Elapsed Time: 0:00:35.208
Process Time: 0:00:05.822
System Calls: 659366
Context Switches: 138074
Page Faults: 61507
Bytes Read: 80719977
Bytes Written: 320584
Bytes Other: 908395
Average for without-select key over 3 runs
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 1:00 am, Monday, January 1 1601
Elapsed Time: 0:00:33.796
Process Time: 0:00:06.166
System Calls: 857893
Context Switches: 140154
Page Faults: 69061
Bytes Read: 99353998
Bytes Written: 2017152
Bytes Other: 1175082
--
Claudio
--
Claudio
next prev parent reply other threads:[~2013-02-22 11:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-16 11:38 Calling 'select' from emacs_gnutls_pull Eli Zaretskii
2013-02-16 15:55 ` Ted Zlatanov
2013-02-16 16:52 ` Eli Zaretskii
2013-02-16 18:00 ` Ted Zlatanov
2013-02-16 19:30 ` Eli Zaretskii
2013-02-17 13:20 ` Ted Zlatanov
2013-02-22 11:15 ` Claudio Bley [this message]
2013-02-22 12:36 ` Eli Zaretskii
2013-02-22 15:17 ` Claudio Bley
2013-02-22 16:02 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k3q0wqef.wl%claudio.bley@gmail.com \
--to=claudio.bley@gmail.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.