Use ref counting for network during SignalPoll method call of wpa_supplicant.
[platform/upstream/connman.git] / plugins / wifi.c
index 2f70ee7..d998967 100755 (executable)
@@ -3854,6 +3854,7 @@ static void signalpoll_callback(int result, int maxspeed, int strength,
 
        if (result != 0) {
                DBG("Failed to get maxspeed from signalpoll !");
+               connman_network_unref(network);
                return;
        }
 
@@ -3862,11 +3863,12 @@ static void signalpoll_callback(int result, int maxspeed, int strength,
                strength = 100;
 
        DBG("maxspeed = %d, strength = %d", maxspeed, strength);
-       if (network) {
-               connman_network_set_strength(network, (uint8_t)strength);
-               connman_network_set_maxspeed(network, maxspeed);
-               set_connection_mode(network, maxspeed);
-       }
+
+       connman_network_set_strength(network, (uint8_t)strength);
+       connman_network_set_maxspeed(network, maxspeed);
+       set_connection_mode(network, maxspeed);
+
+       connman_network_unref(network);
 }
 
 static int network_signalpoll(struct wifi_data *wifi)
@@ -3877,6 +3879,8 @@ static int network_signalpoll(struct wifi_data *wifi)
        if (!wifi || !wifi->network)
                return -ENODEV;
 
+       wifi->network = connman_network_ref(wifi->network);
+
        interface = wifi->interface;
        network = wifi->network;
 
@@ -3898,6 +3902,7 @@ static gboolean autosignalpoll_timeout(gpointer data)
        if (ret < 0) {
                DBG("Fail to get max speed !!");
                wifi->automaxspeed_timeout = 0;
+               connman_network_unref(wifi->network);
                return FALSE;
        }