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:37:44 +0200 |
commit | 13386f760ac46564c363ea690d517d941fd1686e (patch) | |
tree | dac7e1ca5f5836e8079a74c97b210fa16490b857 | |
parent | 9b35d29d06e401deab2cd073ed3b93198beb3a6e (diff) | |
download | NetworkManager-13386f760ac46564c363ea690d517d941fd1686e.tar.gz |
agent-manager: fix leak of secret-agent
-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); } } |