diff options
author | Thomas Haller <thaller@redhat.com> | 2015-08-25 16:26:26 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-08-25 16:26:26 +0200 |
commit | 099b2ca0c670a1ac7cf2c18b828a752d2af9e89d (patch) | |
tree | 4df5888674a6eb96dd2e323ea80ccb7719b9b5c1 | |
parent | 0432d337f6893b91e702b5142a26ea3fc8209d80 (diff) | |
download | NetworkManager-th/secret-agent-rh1253407.tar.gz |
agent-manager: fix leak of secret-agentth/secret-agent-rh1253407
-rw-r--r-- | src/settings/nm-agent-manager.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index 3ed2e57916..b3f2f675b0 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -500,6 +500,9 @@ request_free (Request *req) g_object_unref (req->self); + if (req->current) + g_object_unref (req->current); + memset (req, 0, sizeof (Request)); g_free (req); } @@ -656,15 +659,19 @@ request_remove_agent (Request *req, NMSecretAgent *agent, GSList **pending_reqs) self = req->self; - req->pending = g_slist_remove (req->pending, agent); - if (agent == req->current) { + nm_assert (!g_slist_find (req->pending, agent)); + _LOGD (agent, "current agent removed from secrets request "LOG_REQ_FMT, LOG_REQ_ARG (req)); *pending_reqs = g_slist_prepend (*pending_reqs, req); } else { + req->pending = g_slist_remove (req->pending, agent); + _LOGD (agent, "agent removed from secrets request "LOG_REQ_FMT, LOG_REQ_ARG (req)); + + g_object_unref (agent); } } |