curl: enable threaded resolver
PATCH 1/1 curl: enable threaded resolver
From: André Draszik <[email protected]>
Multi-threaded applications using libcurl crash on DNS timeouts when built using OE.
The reason is as follows:
By default, libcurl implements DNS timeouts using a timer (alarm()) and a pair of setjmp()/longjmp(). This approach is unsafe in multi-threaded applications for various reasons, as e.g. explained in the relevant man-pages.
To avoid this, libcurl can be compiled with a built-in threaded resolver, or against the c-ares asynchronous resolver library.
To keep extra dependencies to a minimum, and to mimic other distributions (debian at least), and because c-ares is not available in OE-core, add a PACKAGECONFIG to be able to enable use of of the built-in threaded resolver and enable it by default.
--- meta/recipes-support/curl/curl_7.54.1.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
meta/recipes-support/curl/curl_7.54.1.bb +4 -3
@@ -20,9 +20,9 @@ SRC_URI[sha256sum] = "fdfc4df2d001ee0c44ec071186e770046249263c491fcae48df0e1a3ca CVE_PRODUCT = "libcurl" inherit autotools pkgconfig binconfig multilib_header -PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls proxy zlib" -PACKAGECONFIG_class-native = "ipv6 proxy ssl zlib" -PACKAGECONFIG_class-nativesdk = "ipv6 proxy ssl zlib" +PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls proxy thres zlib" +PACKAGECONFIG_class-native = "ipv6 proxy ssl thres zlib" +PACKAGECONFIG_class-nativesdk = "ipv6 proxy ssl thres zlib" PACKAGECONFIG[dict] = "--enable-dict,--disable-dict," PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
@@ -42,6 +42,7 @@ PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp," PACKAGECONFIG[ssl] = "--with-ssl --with-random=/dev/urandom,--without-ssl,openssl" PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet," PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp," +PACKAGECONFIG[thres] = "--enable-threaded-resolver, --disable-threaded-resolver" PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib" PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
Signature · 1 line
2.14.1
Quoted 3 lines · André Draszik
+PACKAGECONFIG[thres] = "--enable-threaded-resolver, --disable-threaded-resolver"
That's not the most obvious name for the option, how about just "threaded-resolver" to make it clear?
Ross
PATCH v2 1/1 curl: enable threaded resolver
In reply to André DraszikFrom: André Draszik <[email protected]>
Multi-threaded applications using libcurl crash on DNS timeouts when built using OE.
The reason is as follows:
By default, libcurl implements DNS timeouts using a timer (alarm()) and a pair of setjmp()/longjmp(). This approach is unsafe in multi-threaded applications for various reasons, as e.g. explained in the relevant man-pages.
To avoid this, libcurl can be compiled with a built-in threaded resolver, or against the c-ares asynchronous resolver library.
To keep extra dependencies to a minimum, and to mimic other distributions (debian at least), and because c-ares is not available in OE-core, add a PACKAGECONFIG to be able to enable use of of the built-in threaded resolver and enable it by default.
---
v2: rename PACKAGECONFIG option from thres to threaded-resolver
--- meta/recipes-support/curl/curl_7.54.1.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
meta/recipes-support/curl/curl_7.54.1.bb +4 -3
@@ -20,9 +20,9 @@ SRC_URI[sha256sum] = "fdfc4df2d001ee0c44ec071186e770046249263c491fcae48df0e1a3ca CVE_PRODUCT = "libcurl" inherit autotools pkgconfig binconfig multilib_header -PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls proxy zlib" -PACKAGECONFIG_class-native = "ipv6 proxy ssl zlib" -PACKAGECONFIG_class-nativesdk = "ipv6 proxy ssl zlib" +PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} gnutls proxy threaded-resolver zlib" +PACKAGECONFIG_class-native = "ipv6 proxy ssl threaded-resolver zlib" +PACKAGECONFIG_class-nativesdk = "ipv6 proxy ssl threaded-resolver zlib" PACKAGECONFIG[dict] = "--enable-dict,--disable-dict," PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls"
@@ -42,6 +42,7 @@ PACKAGECONFIG[smtp] = "--enable-smtp,--disable-smtp," PACKAGECONFIG[ssl] = "--with-ssl --with-random=/dev/urandom,--without-ssl,openssl" PACKAGECONFIG[telnet] = "--enable-telnet,--disable-telnet," PACKAGECONFIG[tftp] = "--enable-tftp,--disable-tftp," +PACKAGECONFIG[threaded-resolver] = "--enable-threaded-resolver,--disable-threaded-resolver" PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib" PACKAGECONFIG[krb5] = "--with-gssapi,--without-gssapi,krb5"
Signature · 1 line
2.14.1