diff options
author | Zdenek Pavlas <zpavlas@redhat.com> | 2013-03-11 14:57:07 +0100 |
---|---|---|
committer | Kamil Dudka <kdudka@redhat.com> | 2013-03-12 10:58:20 +0100 |
commit | 57ccdfa8d2bb6275388223f4676cd623ebd01697 (patch) | |
tree | 2e36708a0905d011b78582090ec063ea0fbea440 | |
parent | 491e026ccda0e60975fa6e2e9cf3ccca37e18f7b (diff) |
curl_global_init: accept the CURL_GLOBAL_ACK_EINTR flag
The flag can be used in pycurl-based applications where using the multi
interface would not be acceptable because of the performance lost caused
by implementing the select() loop in python.
Bug: http://curl.haxx.se/bug/view.cgi?id=1168
Downstream Bug: https://bugzilla.redhat.com/919127
-rw-r--r-- | RELEASE-NOTES | 2 | ||||
-rw-r--r-- | docs/libcurl/curl_global_init.3 | 4 | ||||
-rw-r--r-- | docs/libcurl/symbols-in-versions | 1 | ||||
-rw-r--r-- | include/curl/curl.h | 1 | ||||
-rw-r--r-- | lib/easy.c | 2 | ||||
-rw-r--r-- | lib/select.c | 17 | ||||
-rw-r--r-- | lib/select.h | 6 |
7 files changed, 18 insertions, 15 deletions
diff --git a/RELEASE-NOTES b/RELEASE-NOTES index b41a56655..d8f4ce34a 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -24,6 +24,7 @@ This release includes the following changes: o darwinssl: Make certificate errors less techy o imap/pop3/smtp: Added support for the STARTTLS capability o checksrc: ban use of sprintf, vsprintf, strcat, strncat and gets + o curl_global_init() now accepts the CURL_GLOBAL_ACK_EINTR flag [10] This release includes the following bugfixes: @@ -81,3 +82,4 @@ References to bug reports and discussions on issues: [7] = http://curl.haxx.se/bug/view.cgi?id=1190 [8] = http://curl.haxx.se/bug/view.cgi?id=1193 [9] = http://curl.haxx.se/bug/view.cgi?id=1194 + [10] = http://curl.haxx.se/bug/view.cgi?id=1168 diff --git a/docs/libcurl/curl_global_init.3 b/docs/libcurl/curl_global_init.3 index d91e1bdb7..6a0838357 100644 --- a/docs/libcurl/curl_global_init.3 +++ b/docs/libcurl/curl_global_init.3 @@ -70,6 +70,10 @@ Initialise nothing extra. This sets no bit. .B CURL_GLOBAL_DEFAULT A sensible default. It will init both SSL and Win32. Right now, this equals the functionality of the \fBCURL_GLOBAL_ALL\fP mask. +.TP +.B CURL_GLOBAL_ACK_EINTR +When this flag is set, curl will acknowledge EINTR condition when connecting +or when waiting for data. Otherwise, curl waits until full timeout elapses. .SH RETURN VALUE If this function returns non-zero, something went wrong and you cannot use the other curl functions. diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions index 1de1aceb7..37b5e277d 100644 --- a/docs/libcurl/symbols-in-versions +++ b/docs/libcurl/symbols-in-versions @@ -614,6 +614,7 @@ CURL_GLOBAL_DEFAULT 7.8 CURL_GLOBAL_NOTHING 7.8 CURL_GLOBAL_SSL 7.8 CURL_GLOBAL_WIN32 7.8.1 +CURL_GLOBAL_ACK_EINTR 7.30.0 CURL_HTTP_VERSION_1_0 7.9.1 CURL_HTTP_VERSION_1_1 7.9.1 CURL_HTTP_VERSION_NONE 7.9.1 diff --git a/include/curl/curl.h b/include/curl/curl.h index 50f40435e..0b2b7ea44 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -2015,6 +2015,7 @@ typedef enum { #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) #define CURL_GLOBAL_NOTHING 0 #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) /***************************************************************************** diff --git a/lib/easy.c b/lib/easy.c index 2e747bb28..2739598ef 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -262,6 +262,8 @@ CURLcode curl_global_init(long flags) } #endif + Curl_ack_eintr = flags & CURL_GLOBAL_ACK_EINTR; + init_flags = flags; /* Preset pseudo-random number sequence. */ diff --git a/lib/select.c b/lib/select.c index d13e1228a..db7fb6d43 100644 --- a/lib/select.c +++ b/lib/select.c @@ -50,11 +50,8 @@ #define elapsed_ms (int)curlx_tvdiff(curlx_tvnow(), initial_tv) -#ifdef CURL_ACKNOWLEDGE_EINTR -#define error_not_EINTR (1) -#else -#define error_not_EINTR (error != EINTR) -#endif +int Curl_ack_eintr = 0; +#define error_not_EINTR (Curl_ack_eintr || error != EINTR) /* * Internal function used for waiting a specific amount of ms @@ -67,10 +64,6 @@ * Timeout resolution, accuracy, as well as maximum supported * value is system dependent, neither factor is a citical issue * for the intended use of this function in the library. - * On non-DOS and non-Winsock platforms, when compiled with - * CURL_ACKNOWLEDGE_EINTR defined, EINTR condition is honored - * and function might exit early without awaiting full timeout, - * otherwise EINTR will be ignored and full timeout will elapse. * * Return values: * -1 = system call error, invalid timeout value, or interrupted @@ -133,9 +126,6 @@ int Curl_wait_ms(int timeout_ms) * A negative timeout value makes this function wait indefinitely, * unles no valid file descriptor is given, when this happens the * negative timeout is ignored and the function times out immediately. - * When compiled with CURL_ACKNOWLEDGE_EINTR defined, EINTR condition - * is honored and function might exit early without awaiting timeout, - * otherwise EINTR will be ignored. * * Return values: * -1 = system call error or fd >= FD_SETSIZE @@ -351,9 +341,6 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ * A negative timeout value makes this function wait indefinitely, * unles no valid file descriptor is given, when this happens the * negative timeout is ignored and the function times out immediately. - * When compiled with CURL_ACKNOWLEDGE_EINTR defined, EINTR condition - * is honored and function might exit early without awaiting timeout, - * otherwise EINTR will be ignored. * * Return values: * -1 = system call error or fd >= FD_SETSIZE diff --git a/lib/select.h b/lib/select.h index 00789bb89..c00afe166 100644 --- a/lib/select.h +++ b/lib/select.h @@ -81,6 +81,12 @@ int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms); +/* On non-DOS and non-Winsock platforms, when Curl_ack_eintr is set, + * EINTR condition is honored and function might exit early without + * awaiting full timeout. Otherwise EINTR will be ignored and full + * timeout will elapse. */ +extern int Curl_ack_eintr; + int Curl_wait_ms(int timeout_ms); #ifdef TPF |