Changeset 11805


Ignore:
Timestamp:
Feb 1, 2011, 5:46:42 PM (11 years ago)
Author:
jordan
Message:

(trunk gtk) #3817 "use the OS' proxy support" -- fix memory leaks in the GTK+ implementation.

r11512 introduced a handful of memory leaks by not freeing the GConfValue objects after use.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/main.c

    r11802 r11805  
    397397        tr_inf( "Transmission registered as default magnet link handler" );
    398398    }
     399
     400    g_object_unref( G_OBJECT( client ) );
    399401#endif
    400402}
     
    605607    {
    606608        const char * url = gconf_value_get_string( value );
     609
    607610        if( url && *url )
    608611        {
    609612            char * scheme = NULL;
     613            GConfValue * port_value;
    610614
    611615            if( !tr_urlParse( url, strlen( url ), &scheme, NULL, NULL, NULL ) )
     
    622626
    623627            if( port_key != NULL )
    624                 if(( value = gconf_client_get( client, port_key, NULL )))
     628            {
     629                if(( port_value = gconf_client_get( client, port_key, NULL )))
     630                {
    625631                    if(( port = gconf_value_get_int( value )))
    626632                        curl_easy_setopt( easy, CURLOPT_PROXYPORT, (long)port );
    627633
     634                    gconf_value_free( port_value );
     635                }
     636            }
     637
    628638            tr_free( scheme );
    629639        }
     640
     641        gconf_value_free( value );
    630642    }
    631643}
     
    636648{
    637649#ifdef HAVE_GCONF2
    638     const char * str;
    639650    GConfValue * value;
    640651    CURL * easy = vcurl;
     
    645656    if(( value = gconf_client_get( client, "/system/proxy/mode", NULL )))
    646657    {
    647         char * mode = g_strdup( gconf_value_get_string( value ) );
     658        const char * mode = gconf_value_get_string( value );
    648659
    649660        if( !gtr_strcmp0( mode, "auto" ) )
     
    671682        }
    672683
    673         g_free( mode );
     684        gconf_value_free( value );
    674685    }
    675686
    676687    /* if this the proxy hasn't been handled yet and "use_http_proxy" is disabled, then don't use a proxy */
     688    if( use_http_proxy ) {
     689        if(( value = gconf_client_get( client, "/system/http_proxy/use_http_proxy", NULL ))) {
     690            use_http_proxy = gconf_value_get_bool( value ) != 0;
     691            gconf_value_free( value );
     692        }
     693    }
     694
    677695    if( use_http_proxy )
    678         if(( value = gconf_client_get( client, "/system/http_proxy/use_http_proxy", NULL )))
    679             use_http_proxy = gconf_value_get_bool( value ) != 0;
    680 
    681     if( use_http_proxy )
    682     {
     696    {
     697        gboolean auth = FALSE;
    683698        applyDesktopProxySettings( easy, client, "/system/http_proxy/host", "/system/http_proxy/port" );
    684699
    685         if((( value = gconf_client_get( client, "/system/http_proxy/use_authentication", NULL ))) &&  gconf_value_get_bool( value ))
     700        if(( value = gconf_client_get( client, "/system/http_proxy/use_authentication", NULL )))
    686701        {
    687             const char * user = NULL;
    688             const char * pass = NULL;
    689 
    690             if(( value = gconf_client_get( client, "/system/http_proxy/authentication_user", NULL )))
    691                 user = str = gconf_value_get_string( value );
    692             if(( value = gconf_client_get( client, "/system/http_proxy/authentication_password", NULL )))
    693                 pass = str = gconf_value_get_string( value );
    694 
    695            if( ( user != NULL ) && ( pass != NULL ) )
    696            {
    697                char * userpass = g_strdup_printf( "%s:%s", user, pass );
    698                curl_easy_setopt( easy, CURLOPT_PROXYUSERPWD, userpass );
    699                g_free( userpass );
    700            }
    701        }
    702     }
     702            auth = gconf_value_get_bool( value );
     703            gconf_value_free( value );
     704        }
     705
     706        if( auth )
     707        {
     708            GConfValue * user_value = gconf_client_get( client, "/system/http_proxy/authentication_user", NULL );
     709            const char * user = ( user_value != NULL ) ? gconf_value_get_string( user_value ) : NULL;
     710            GConfValue * pass_value = gconf_client_get( client, "/system/http_proxy/authentication_password", NULL );
     711            const char * pass = ( pass_value != NULL ) ? gconf_value_get_string( pass_value ) : NULL;
     712
     713            if( ( user != NULL ) && ( pass != NULL ) )
     714            {
     715                char * userpass = g_strdup_printf( "%s:%s", user, pass );
     716                curl_easy_setopt( easy, CURLOPT_PROXYUSERPWD, userpass );
     717                g_free( userpass );
     718            }
     719
     720            if( pass_value ) gconf_value_free( pass_value );
     721            if( user_value ) gconf_value_free( user_value );
     722        }
     723    }
     724
     725    g_object_unref( G_OBJECT( client ) );
    703726#endif
    704727}
Note: See TracChangeset for help on using the changeset viewer.