1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
From 3afb07f2c63fb6dc3983b28e7cdaf11fceb741d1 Mon Sep 17 00:00:00 2001
From: "Heiko Schlittermann (HS12-RIPE)" <hs@schlittermann.de>
Date: Mon, 2 Mar 2020 22:56:32 +0100
Subject: [PATCH 6/6] GnuTLS: Do not care about corked data when uncorking
(cherry picked from commit d8d7e3a4162b52382daf8319f221c085c76c5b8f)
---
src/tls-gnu.c | 31 +++++++++++++++----------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/src/tls-gnu.c b/src/tls-gnu.c
index 94a718673..2091e44db 100644
--- a/src/tls-gnu.c
+++ b/src/tls-gnu.c
@@ -2887,22 +2887,21 @@ if (len > INT_MAX)
if (!more && state->corked)
{
DEBUG(D_tls) debug_printf("gnutls_record_uncork(session=%p)\n", state->session);
- do {
- do
- /* We can't use GNUTLS_RECORD_WAIT here, as it retries on
- GNUTLS_E_AGAIN || GNUTLS_E_INTR, which would break our timeout set by alarm().
- The GNUTLS_E_AGAIN should not happen ever, as our sockets are blocking anyway.
- But who knows. (That all relies on the fact that GNUTLS_E_INTR and GNUTLS_E_AGAIN
- match the EINTR and EAGAIN errno values.) */
- outbytes = gnutls_record_uncork(state->session, 0);
- while (outbytes == GNUTLS_E_AGAIN);
-
- if (outbytes < 0)
- {
- record_io_error(state, len, US"uncork", NULL);
- return -1;
- }
- } while (gnutls_record_check_corked(state->session) > 0);
+ do
+ /* We can't use GNUTLS_RECORD_WAIT here, as it retries on
+ GNUTLS_E_AGAIN || GNUTLS_E_INTR, which would break our timeout set by alarm().
+ The GNUTLS_E_AGAIN should not happen ever, as our sockets are blocking anyway.
+ But who knows. (That all relies on the fact that GNUTLS_E_INTR and GNUTLS_E_AGAIN
+ match the EINTR and EAGAIN errno values.) */
+ outbytes = gnutls_record_uncork(state->session, 0);
+ while (outbytes == GNUTLS_E_AGAIN);
+
+ if (outbytes < 0)
+ {
+ record_io_error(state, len, US"uncork", NULL);
+ return -1;
+ }
+
state->corked = FALSE;
}
#endif
--
2.28.0
|