decide at runtime, rather than compile time, whether to use curl_multi_action
This commit is contained in:
parent
600e2d26ec
commit
bd41421591
|
@ -27,11 +27,24 @@
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "web.h"
|
#include "web.h"
|
||||||
|
|
||||||
/* Use curl_multi_socket_action() instead of curl_multi_perform()
|
static tr_bool
|
||||||
if libcurl >= 7.18.2. See http://trac.transmissionbt.com/ticket/1844 */
|
useCurlMultiSocketAction( void )
|
||||||
#if LIBCURL_VERSION_NUM >= 0x071202
|
{
|
||||||
#define USE_CURL_MULTI_SOCKET_ACTION
|
static tr_bool tested = FALSE;
|
||||||
#endif
|
static tr_bool useMultiSocketAction;
|
||||||
|
|
||||||
|
if( !tested )
|
||||||
|
{
|
||||||
|
curl_version_info_data * data = curl_version_info( CURLVERSION_NOW );
|
||||||
|
tr_inf( "Using libcurl %s", data->version );
|
||||||
|
/* Use curl_multi_socket_action() instead of curl_multi_perform()
|
||||||
|
* if libcurl >= 7.18.2. See http://trac.transmissionbt.com/ticket/1844 */
|
||||||
|
useMultiSocketAction = data->version_num >= 0x071202;
|
||||||
|
tested = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return useMultiSocketAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -385,20 +398,23 @@ tr_multi_perform( tr_web * g, int fd )
|
||||||
g->prev_running, g->still_running );
|
g->prev_running, g->still_running );
|
||||||
|
|
||||||
/* invoke libcurl's processing */
|
/* invoke libcurl's processing */
|
||||||
#ifdef USE_CURL_MULTI_SOCKET_ACTION
|
if( useCurlMultiSocketAction( ) )
|
||||||
|
{
|
||||||
do {
|
do {
|
||||||
dbgmsg( "calling curl_multi_socket_action..." );
|
dbgmsg( "calling curl_multi_socket_action..." );
|
||||||
mcode = curl_multi_socket_action( g->multi, fd, 0, &g->still_running );
|
mcode = curl_multi_socket_action( g->multi, fd, 0, &g->still_running );
|
||||||
fd = CURL_SOCKET_TIMEOUT;
|
fd = CURL_SOCKET_TIMEOUT;
|
||||||
dbgmsg( "done calling curl_multi_socket_action..." );
|
dbgmsg( "done calling curl_multi_socket_action..." );
|
||||||
} while( mcode == CURLM_CALL_MULTI_SOCKET );
|
} while( mcode == CURLM_CALL_MULTI_SOCKET );
|
||||||
#else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
do {
|
do {
|
||||||
dbgmsg( "calling curl_multi_perform..." );
|
dbgmsg( "calling curl_multi_perform..." );
|
||||||
mcode = curl_multi_perform( g->multi, &g->still_running );
|
mcode = curl_multi_perform( g->multi, &g->still_running );
|
||||||
dbgmsg( "done calling curl_multi_perform..." );
|
dbgmsg( "done calling curl_multi_perform..." );
|
||||||
} while( mcode == CURLM_CALL_MULTI_PERFORM );
|
} while( mcode == CURLM_CALL_MULTI_PERFORM );
|
||||||
#endif
|
}
|
||||||
tr_assert( mcode == CURLM_OK, "curl_multi_perform() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
|
tr_assert( mcode == CURLM_OK, "curl_multi_perform() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
|
||||||
if( mcode != CURLM_OK )
|
if( mcode != CURLM_OK )
|
||||||
tr_err( "%s", curl_multi_strerror( mcode ) );
|
tr_err( "%s", curl_multi_strerror( mcode ) );
|
||||||
|
|
Loading…
Reference in New Issue