diff --git a/libsecret/secret-backend.c b/libsecret/secret-backend.c index 2c26c7d..a63b75c 100644 --- a/libsecret/secret-backend.c +++ b/libsecret/secret-backend.c @@ -122,6 +122,20 @@ backend_get_instance (void) return instance; } +void +_secret_backend_uncache_instance (void) +{ + SecretBackend *instance = NULL; + + G_LOCK (backend_instance); + instance = backend_instance; + backend_instance = NULL; + G_UNLOCK (backend_instance); + + if (instance != NULL) + g_object_unref (instance); +} + static GType backend_get_impl_type (void) { diff --git a/libsecret/secret-backend.h b/libsecret/secret-backend.h index 7dae506..3dadffa 100644 --- a/libsecret/secret-backend.h +++ b/libsecret/secret-backend.h @@ -97,6 +97,8 @@ struct _SecretBackendInterface void _secret_backend_ensure_extension_point (void); +void _secret_backend_uncache_instance + (void); void secret_backend_get (SecretBackendFlags flags, GCancellable *cancellable, diff --git a/libsecret/secret-service.c b/libsecret/secret-service.c index 95498a6..36d2feb 100644 --- a/libsecret/secret-service.c +++ b/libsecret/secret-service.c @@ -191,6 +191,8 @@ service_uncache_instance (SecretService *which) if (watch != 0) g_bus_unwatch_name (watch); + _secret_backend_uncache_instance (); + return matched; }