authentication process is leaking reference during the authentication: This happens in all logs. Perhaps this is wrong: signon-accounts.cpp: GVariantCXX sessionData(ag_auth_data_get_login_parameters(m_authData, extraOptions), TRANSFER_REF); According to http://accounts-sso.gitlab.io/libaccounts-glib/AgAuthData.html#ag-auth-data-get-login-parameters, ag_auth_data_get_login_parameters() does not transfer ownership, so the line above probably should be: GVariantCXX sessionData(g_variant_ref_sink(ag_auth_data_get_login_parameters(m_authData, extraOptions)), TRANSFER_REF); Not sure whether that has been broken all along or is due to an API change. Alberto Mardegan wrote that code in SyncEvolution. I see a commit which cleans up reference counting in libaccounts. Perhaps the warning was not seen when writing the count because ag_auth_data_get_login_parameters returned a GVariant where the ref count already was too high, so decrementing once too often did no harm.
Fix included in master branch: commit 59372771027ea98f59e42b2390263b077a71876c Author: Patrick Ohly <patrick.ohly@intel.com> Date: Thu Nov 3 00:50:26 2016 -0700 SignonAuthProvider: fix ref counting issue The account data was unreferenced once too often, or rather, a suitable ref count increase was missing. A debug build of glib detects that ("GLib: g_variant_unref: assertion 'value->ref_count > 0' failed"), but without that check the code might also crash. diff --git a/src/backends/signon/signon-accounts.cpp b/src/backends/signon/signon-accounts.cpp index 488a0e6..3ea9074 100644 --- a/src/backends/signon/signon-accounts.cpp +++ b/src/backends/signon/signon-accounts.cpp @@ -165,7 +165,7 @@ private: // so we have to use the "steal" variant to enable that assignment. GVariantStealCXX resultData; GErrorCXX gerror; - GVariantCXX sessionData(ag_auth_data_get_login_parameters(m_authData, extraOptions), TRANSFER_REF); + GVariantCXX sessionData(g_variant_ref_sink(ag_auth_data_get_login_parameters(m_authData, extraOptions)), TRANSFER_REF); const char *mechanism = ag_auth_data_get_mechanism(m_authData); PlainGStr buffer(g_variant_print(sessionData, true)); SE_LOG_DEBUG(NULL, "asking for authentication with method %s, mechanism %s and parameters %s",
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.