Subject: bug#22493: 25.1.50; open-gnutls-stream doesn't respect :nowait, so the connections are synchronous

From: Eli Zaretskii <[email-masked]>
Date: Sat, 06 Feb 2016 09:51:35 +0200

> From: Lars Ingebrigtsen <[email-masked]>
> Cc: [email-masked]
> Date: Sat, 06 Feb 2016 14:03:40 +1100
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> From: Lars Ingebrigtsen <[email-masked]>
> >> Cc: [email-masked]
> >> Date: Fri, 05 Feb 2016 18:34:44 +1100
> >> 
> >> There is no waiting in the GnuTLS library during negotiation.  It is
> >> fully asynchronous.  If any action blocks, it will return, and we can
> >> proceed later.  It works, seen from the application side, as any other
> >> network connection.
> >
> > The _waiting_ is asynchronous.  The processing cannot be, because
> > GnuTLS doesn't start any threads.
> 
> I think you're nitpicking semantics now.  There will be no user-visible
> waiting while a TLS connection is negotiated, OK?

That is only true if the foreground program has something useful to do
while TLS negotiation goes on.  You have a very particular application
in mind (a browser) where you can just let user scroll through the
rest of the buffer, but (1) what if the user doesn't want to scroll,
but wants to see that image that wasn't yet downloaded; and (b) not
every application is a browser where there's something to do while
these negotiations go on.

IOW, your changes might make sense for some small set of applications,
but for the others it's just a major complication in the code base
with no real gains.

We shouldn't make such major changes in low-level code when they
benefit only a small class of applications, IMO.