1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-26 01:27:28 +00:00

(trunk libT) #1748: judging from Biiaru's testing yesterday after I left, the problem is somewhere in web.c. Let's start by adding some cruel assertions in there.

This commit is contained in:
Charles Kerr 2009-02-05 14:52:00 +00:00
parent bbddcf2774
commit ee58379377

View file

@ -158,11 +158,12 @@ addTask( void * vtask )
else
#endif
{
const CURLMcode rc = curl_multi_add_handle( web->multi, easy );
if( rc == CURLM_OK )
const CURLMcode mcode = curl_multi_add_handle( web->multi, easy );
tr_assert( mcode == CURLM_OK, "curl_multi_add_handle() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
if( mcode == CURLM_OK )
++web->still_running;
else
tr_err( "%s", curl_multi_strerror( rc ) );
tr_err( "%s", curl_multi_strerror( mcode ) );
}
}
}
@ -220,9 +221,14 @@ remove_finished_tasks( tr_web * g )
if( easy ) {
long code;
struct tr_web_task * task;
curl_easy_getinfo( easy, CURLINFO_PRIVATE, (void*)&task );
curl_easy_getinfo( easy, CURLINFO_RESPONSE_CODE, &code );
curl_multi_remove_handle( g->multi, easy );
CURLcode ecode;
CURLMcode mcode;
ecode = curl_easy_getinfo( easy, CURLINFO_PRIVATE, (void*)&task );
tr_assert( ecode == CURLE_OK, "curl_easy_getinfo() failed: %d (%s)", ecode, curl_easy_strerror( ecode ) );
ecode = curl_easy_getinfo( easy, CURLINFO_RESPONSE_CODE, &code );
tr_assert( ecode == CURLE_OK, "curl_easy_getinfo() failed: %d (%s)", ecode, curl_easy_strerror( ecode ) );
mcode = curl_multi_remove_handle( g->multi, easy );
tr_assert( mcode == CURLM_OK, "curl_multi_socket_action() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
curl_easy_cleanup( easy );
task_finish( task, code );
}
@ -283,8 +289,15 @@ add_tasks_from_queue( tr_web * g )
static void
web_close( tr_web * g )
{
CURLMcode mcode;
stop_timer( g );
curl_multi_cleanup( g->multi );
mcode = curl_multi_cleanup( g->multi );
tr_assert( mcode == CURLM_OK, "curl_multi_cleanup() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
if( mcode != CURLM_OK )
tr_err( "%s", curl_multi_strerror( mcode ) );
tr_free( g );
}
@ -295,19 +308,19 @@ static void
tr_multi_socket_action( tr_web * g, int fd )
{
int closed = FALSE;
CURLMcode rc;
CURLMcode mcode;
dbgmsg( "check_run_count: prev_running %d, still_running %d",
g->prev_running, g->still_running );
/* invoke libcurl's processing */
do {
rc = curl_multi_socket_action( g->multi, fd, 0, &g->still_running );
dbgmsg( "event_cb(): fd %d, still_running is %d",
fd, g->still_running );
} while( rc == CURLM_CALL_MULTI_PERFORM );
if( rc != CURLM_OK )
tr_err( "%s", curl_multi_strerror( rc ) );
mcode = curl_multi_socket_action( g->multi, fd, 0, &g->still_running );
dbgmsg( "event_cb(): fd %d, still_running is %d", fd, g->still_running );
} while( mcode == CURLM_CALL_MULTI_PERFORM );
tr_assert( mcode == CURLM_OK, "curl_multi_socket_action() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
if( mcode != CURLM_OK )
tr_err( "%s", curl_multi_strerror( mcode ) );
remove_finished_tasks( g );
@ -381,10 +394,17 @@ addsock( curl_socket_t sockfd,
int action,
struct tr_web * g )
{
struct tr_web_sockinfo * f = tr_new0( struct tr_web_sockinfo, 1 );
CURLMcode mcode;
struct tr_web_sockinfo * f;
f = tr_new0( struct tr_web_sockinfo, 1 );
dbgmsg( "creating a sockinfo %p for fd %d", f, sockfd );
setsock( sockfd, action, g, f );
curl_multi_assign( g->multi, sockfd, f );
mcode = curl_multi_assign( g->multi, sockfd, f );
tr_assert( mcode == CURLM_OK, "curl_multi_assign() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
if( mcode != CURLM_OK )
tr_err( "%s", curl_multi_strerror( mcode ) );
}
/* CURLMOPT_SOCKETFUNCTION */
@ -461,6 +481,7 @@ tr_webRun( tr_session * session,
tr_web*
tr_webInit( tr_session * session )
{
CURLMcode mcode;
static int curlInited = FALSE;
tr_web * web;
@ -479,10 +500,14 @@ tr_webInit( tr_session * session )
web->timer_ms = DEFAULT_TIMER_MSEC; /* overwritten by multi_timer_cb() */
evtimer_set( &web->timer_event, timer_cb, web );
curl_multi_setopt( web->multi, CURLMOPT_SOCKETDATA, web );
curl_multi_setopt( web->multi, CURLMOPT_SOCKETFUNCTION, sock_cb );
curl_multi_setopt( web->multi, CURLMOPT_TIMERDATA, web );
curl_multi_setopt( web->multi, CURLMOPT_TIMERFUNCTION, multi_timer_cb );
mcode = curl_multi_setopt( web->multi, CURLMOPT_SOCKETDATA, web );
tr_assert( mcode == CURLM_OK, "curl_mutli_setopt() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
mcode = curl_multi_setopt( web->multi, CURLMOPT_SOCKETFUNCTION, sock_cb );
tr_assert( mcode == CURLM_OK, "curl_mutli_setopt() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
mcode = curl_multi_setopt( web->multi, CURLMOPT_TIMERDATA, web );
tr_assert( mcode == CURLM_OK, "curl_mutli_setopt() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
mcode = curl_multi_setopt( web->multi, CURLMOPT_TIMERFUNCTION, multi_timer_cb );
tr_assert( mcode == CURLM_OK, "curl_mutli_setopt() failed: %d (%s)", mcode, curl_multi_strerror( mcode ) );
return web;
}