avoid spurious "Could not resolve host: [host name]" error messages
This commit is contained in:
parent
95008127cf
commit
902ddefeb5
118
0004-curl-7.64.0-spurious-resolver-error.patch
Normal file
118
0004-curl-7.64.0-spurious-resolver-error.patch
Normal file
@ -0,0 +1,118 @@
|
||||
From 5ddabe85b2e3e4fd08d06980719d71a2aed77a5b Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stenberg <daniel@haxx.se>
|
||||
Date: Thu, 28 Feb 2019 20:34:36 +0100
|
||||
Subject: [PATCH] threaded-resolver: shutdown the resolver thread without error
|
||||
message
|
||||
|
||||
When a transfer is done, the resolver thread will be brought down. That
|
||||
could accidentally generate an error message in the error buffer even
|
||||
though this is not an error situationand the transfer would still return
|
||||
OK. An application that still reads the error buffer could find a
|
||||
"Could not resolve host: [host name]" message there and get confused.
|
||||
|
||||
Reported-by: Michael Schmid
|
||||
Fixes #3629
|
||||
Closes #3630
|
||||
|
||||
Upstream-commit: 754ae103989a6ad0869d23a6a427d652b5b4a2fe
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
lib/asyn-thread.c | 68 ++++++++++++++++++++++++++---------------------
|
||||
1 file changed, 38 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c
|
||||
index a9679d0..55e0811 100644
|
||||
--- a/lib/asyn-thread.c
|
||||
+++ b/lib/asyn-thread.c
|
||||
@@ -461,6 +461,42 @@ static CURLcode resolver_error(struct connectdata *conn)
|
||||
return result;
|
||||
}
|
||||
|
||||
+static CURLcode thread_wait_resolv(struct connectdata *conn,
|
||||
+ struct Curl_dns_entry **entry,
|
||||
+ bool report)
|
||||
+{
|
||||
+ struct thread_data *td = (struct thread_data*) conn->async.os_specific;
|
||||
+ CURLcode result = CURLE_OK;
|
||||
+
|
||||
+ DEBUGASSERT(conn && td);
|
||||
+ DEBUGASSERT(td->thread_hnd != curl_thread_t_null);
|
||||
+
|
||||
+ /* wait for the thread to resolve the name */
|
||||
+ if(Curl_thread_join(&td->thread_hnd)) {
|
||||
+ if(entry)
|
||||
+ result = getaddrinfo_complete(conn);
|
||||
+ }
|
||||
+ else
|
||||
+ DEBUGASSERT(0);
|
||||
+
|
||||
+ conn->async.done = TRUE;
|
||||
+
|
||||
+ if(entry)
|
||||
+ *entry = conn->async.dns;
|
||||
+
|
||||
+ if(!conn->async.dns && report)
|
||||
+ /* a name was not resolved, report error */
|
||||
+ result = resolver_error(conn);
|
||||
+
|
||||
+ destroy_async_data(&conn->async);
|
||||
+
|
||||
+ if(!conn->async.dns && report)
|
||||
+ connclose(conn, "asynch resolve failed");
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Until we gain a way to signal the resolver threads to stop early, we must
|
||||
* simply wait for them and ignore their results.
|
||||
@@ -473,7 +509,7 @@ void Curl_resolver_kill(struct connectdata *conn)
|
||||
unfortunately. Otherwise, we can simply cancel to clean up any resolver
|
||||
data. */
|
||||
if(td && td->thread_hnd != curl_thread_t_null)
|
||||
- (void)Curl_resolver_wait_resolv(conn, NULL);
|
||||
+ (void)thread_wait_resolv(conn, NULL, FALSE);
|
||||
else
|
||||
Curl_resolver_cancel(conn);
|
||||
}
|
||||
@@ -494,35 +530,7 @@ void Curl_resolver_kill(struct connectdata *conn)
|
||||
CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
|
||||
struct Curl_dns_entry **entry)
|
||||
{
|
||||
- struct thread_data *td = (struct thread_data*) conn->async.os_specific;
|
||||
- CURLcode result = CURLE_OK;
|
||||
-
|
||||
- DEBUGASSERT(conn && td);
|
||||
- DEBUGASSERT(td->thread_hnd != curl_thread_t_null);
|
||||
-
|
||||
- /* wait for the thread to resolve the name */
|
||||
- if(Curl_thread_join(&td->thread_hnd)) {
|
||||
- if(entry)
|
||||
- result = getaddrinfo_complete(conn);
|
||||
- }
|
||||
- else
|
||||
- DEBUGASSERT(0);
|
||||
-
|
||||
- conn->async.done = TRUE;
|
||||
-
|
||||
- if(entry)
|
||||
- *entry = conn->async.dns;
|
||||
-
|
||||
- if(!conn->async.dns)
|
||||
- /* a name was not resolved, report error */
|
||||
- result = resolver_error(conn);
|
||||
-
|
||||
- destroy_async_data(&conn->async);
|
||||
-
|
||||
- if(!conn->async.dns)
|
||||
- connclose(conn, "asynch resolve failed");
|
||||
-
|
||||
- return result;
|
||||
+ return thread_wait_resolv(conn, entry, TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,7 +1,7 @@
|
||||
Summary: A utility for getting files from remote servers (FTP, HTTP, and others)
|
||||
Name: curl
|
||||
Version: 7.64.0
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
License: MIT
|
||||
Source: https://curl.haxx.se/download/%{name}-%{version}.tar.xz
|
||||
|
||||
@ -14,6 +14,9 @@ Patch2: 0002-curl-7.64.0-nm-fd-leak.patch
|
||||
# fix NULL dereference if flushing cookies with no CookieInfo set (#1683676)
|
||||
Patch3: 0003-curl-7.64.0-cookie-segfault.patch
|
||||
|
||||
# avoid spurious "Could not resolve host: [host name]" error messages
|
||||
Patch4: 0004-curl-7.64.0-spurious-resolver-error.patch
|
||||
|
||||
# patch making libcurl multilib ready
|
||||
Patch101: 0101-curl-7.32.0-multilib.patch
|
||||
|
||||
@ -178,6 +181,7 @@ be installed.
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
# Fedora patches
|
||||
%patch101 -p1
|
||||
@ -345,6 +349,9 @@ rm -f ${RPM_BUILD_ROOT}%{_libdir}/libcurl.la
|
||||
%{_libdir}/libcurl.so.4.[0-9].[0-9].minimal
|
||||
|
||||
%changelog
|
||||
* Wed Mar 21 2019 Kamil Dudka <kdudka@redhat.com> - 7.64.0-5
|
||||
- avoid spurious "Could not resolve host: [host name]" error messages
|
||||
|
||||
* Wed Feb 27 2019 Kamil Dudka <kdudka@redhat.com> - 7.64.0-4
|
||||
- fix NULL dereference if flushing cookies with no CookieInfo set (#1683676)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user