diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-02-07 15:11:53 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-02-07 14:42:16 +0000 |
commit | a61caff747546441474b1a1fc50c664a13a1378f (patch) | |
tree | 81ec3e6aac7262a87a0958e7f3f0834e9f785ad3 /src/mm-iface-modem-location.c | |
parent | a7a8fc909abeb0abe092feb2603d27216f0e1325 (diff) |
iface-modem-location: plug memleaks when updating gps raw variant
The helper method returning a variant from a MMLocationGpsRaw would
return already a full variant reference instead of a floating one, so
we were really increasing the refcount when doing g_variant_ref_sink()
in the location interface.
Fix this by consolidating all helper methods in libmm-glib that return
variants from the different MMLocationXX objects, so that they all
return full variants instead of floating ones.
Diffstat (limited to 'src/mm-iface-modem-location.c')
-rw-r--r-- | src/mm-iface-modem-location.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/mm-iface-modem-location.c b/src/mm-iface-modem-location.c index 8b267621..00a74fd9 100644 --- a/src/mm-iface-modem-location.c +++ b/src/mm-iface-modem-location.c @@ -165,11 +165,10 @@ build_location_dictionary (GVariant *previous, if (location_3gpp_value) g_variant_unref (location_3gpp_value); location_3gpp_value = mm_location_3gpp_get_string_variant (location_3gpp); - if (location_3gpp_value) - g_variant_ref_sink (location_3gpp_value); } if (location_3gpp_value) { + g_assert (!g_variant_is_floating (location_3gpp_value)); g_variant_builder_add (&builder, "{uv}", MM_MODEM_LOCATION_SOURCE_3GPP_LAC_CI, @@ -182,11 +181,10 @@ build_location_dictionary (GVariant *previous, if (location_gps_nmea_value) g_variant_unref (location_gps_nmea_value); location_gps_nmea_value = mm_location_gps_nmea_get_string_variant (location_gps_nmea); - if (location_gps_nmea_value) - g_variant_ref_sink (location_gps_nmea_value); } if (location_gps_nmea_value) { + g_assert (!g_variant_is_floating (location_gps_nmea_value)); g_variant_builder_add (&builder, "{uv}", MM_MODEM_LOCATION_SOURCE_GPS_NMEA, @@ -199,11 +197,10 @@ build_location_dictionary (GVariant *previous, if (location_gps_raw_value) g_variant_unref (location_gps_raw_value); location_gps_raw_value = mm_location_gps_raw_get_dictionary (location_gps_raw); - if (location_gps_raw_value) - g_variant_ref_sink (location_gps_raw_value); } if (location_gps_raw_value) { + g_assert (!g_variant_is_floating (location_gps_raw_value)); g_variant_builder_add (&builder, "{uv}", MM_MODEM_LOCATION_SOURCE_GPS_RAW, @@ -216,11 +213,10 @@ build_location_dictionary (GVariant *previous, if (location_cdma_bs_value) g_variant_unref (location_cdma_bs_value); location_cdma_bs_value = mm_location_cdma_bs_get_dictionary (location_cdma_bs); - if (location_cdma_bs_value) - g_variant_ref_sink (location_cdma_bs_value); } if (location_cdma_bs_value) { + g_assert (!g_variant_is_floating (location_cdma_bs_value)); g_variant_builder_add (&builder, "{uv}", MM_MODEM_LOCATION_SOURCE_CDMA_BS, |