merge: fix errors found with valgrind

A handful of memory leaks and one read-after-free().
This commit is contained in:
Lubomir Rintel
2015-02-18 18:12:34 +01:00
9 changed files with 20 additions and 10 deletions

View File

@@ -873,13 +873,13 @@ VAPIGEN_CHECK(0.17.1.24)
# Tests, utilities and documentation
AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests=root|yes|no], [Build NetworkManager tests (default: yes)]))
AC_ARG_WITH(valgrind, AS_HELP_STRING([--with-valgrind=yes|no|path], [Use valgrind to memory-check the tests (default: yes)]))
AC_ARG_WITH(valgrind, AS_HELP_STRING([--with-valgrind=yes|no|path], [Use valgrind to memory-check the tests (default: no)]))
# Fallback to --with-tests
AC_ARG_WITH(tests, AS_HELP_STRING([--with-tests], [Build NetworkManager tests (deprecated)]))
AS_IF([test -n "$with_tests"], enable_tests="$with_tests")
# Default to --enable-tests --with-valgrind
# Default to --enable-tests --with-valgrind=no
AS_IF([test -z "$enable_tests"], enable_tests="yes")
AS_IF([test -z "$with_valgrind"], with_valgrind="yes")
AS_IF([test -z "$with_valgrind"], with_valgrind="no")
# Normalize values
AS_IF([test "$enable_tests" != "yes" -a "$enable_tests" != "root"], enable_tests="no")
# Search for tools

View File

@@ -884,6 +884,8 @@ dispose (GObject *object)
timeout_cleanup (self);
g_clear_pointer (&priv->iface, g_free);
g_clear_pointer (&priv->hostname, g_free);
g_clear_pointer (&priv->uuid, g_free);
if (priv->hwaddr) {
g_byte_array_free (priv->hwaddr, TRUE);

View File

@@ -158,17 +158,18 @@ nm_auth_chain_steal_data (NMAuthChain *self, const char *tag)
{
ChainData *tmp;
gpointer value = NULL;
void *orig_key;
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (tag != NULL, NULL);
tmp = g_hash_table_lookup (self->data, tag);
if (tmp) {
if (g_hash_table_lookup_extended (self->data, tag, &orig_key, (gpointer)&tmp)) {
g_hash_table_steal (self->data, tag);
value = tmp->data;
/* Make sure the destroy handler isn't called when freeing */
tmp->destroy = NULL;
free_data (tmp);
g_free (orig_key);
}
return value;
}

View File

@@ -186,6 +186,7 @@ nm_connectivity_check_cb (SoupSession *session, SoupMessage *msg, gpointer user_
g_simple_async_result_set_op_res_gssize (simple, new_state);
g_simple_async_result_complete (simple);
g_object_unref (simple);
g_free (cb_data->uri);
g_free (cb_data->response);
@@ -321,6 +322,7 @@ nm_connectivity_check_async (NMConnectivity *self,
g_simple_async_result_set_op_res_gssize (simple, priv->state);
g_simple_async_result_complete_in_idle (simple);
g_object_unref (simple);
}
NMConnectivityState

View File

@@ -5112,6 +5112,7 @@ dispose (GObject *object)
}
g_clear_object (&priv->settings);
g_free (priv->state_file);
g_clear_object (&priv->vpn_manager);
/* Unregister property filter */

View File

@@ -1008,7 +1008,7 @@ init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllin
if (udev_device) {
info->driver = udev_get_driver (platform, udev_device, info->ifindex);
if (!info->driver)
info->driver = rtnl_link_get_type (rtnllink);
info->driver = g_intern_string (rtnl_link_get_type (rtnllink));
if (!info->driver)
info->driver = ethtool_get_driver (info->name);
if (!info->driver)

View File

@@ -720,6 +720,7 @@ dispose (GObject *object)
g_clear_pointer (&priv->event_channel, g_io_channel_unref);
if (priv->ndp) {
ndp_msgrcv_handler_unregister (priv->ndp, receive_ra, NDP_MSG_RA, NM_RDISC (rdisc)->ifindex, rdisc);
ndp_close (priv->ndp);
priv->ndp = NULL;
}

View File

@@ -318,6 +318,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
priv->chains = g_slist_append (priv->chains, chain);
} else {
g_object_unref (agent);
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_FAILED,
"Unable to start agent authentication.");
@@ -585,11 +586,12 @@ request_next_agent (Request *req)
{
GError *error = NULL;
req->current_call_id = NULL;
if (req->current)
g_object_unref (req->current);
if (req->pending) {
/* Send the request to the next agent */
req->current_call_id = NULL;
if (req->current)
g_object_unref (req->current);
req->current = req->pending->data;
req->pending = g_slist_remove (req->pending, req->current);
@@ -599,7 +601,6 @@ request_next_agent (Request *req)
req->next_callback (req);
} else {
req->current_call_id = NULL;
req->current = NULL;
/* No more secret agents are available to fulfill this secrets request */

View File

@@ -2314,6 +2314,8 @@ dispose (GObject *object)
}
g_clear_object (&priv->agent_mgr);
g_clear_pointer (&priv->filename, g_free);
G_OBJECT_CLASS (nm_settings_connection_parent_class)->dispose (object);
}