evolution-data-server/0001-ebackend-network-change-handler.patch

67 lines
2.3 KiB
Diff

From 9a3d7e63cbdc2703f18f70cb38d55a8741cb919d Mon Sep 17 00:00:00 2001
Date: Mon, 3 Feb 2025 13:43:08 +0100
Subject: [PATCH] EBackend: Change when adding signal handler for
"network-changed"
The handler requires a valid ESource instance, otherwise there's printed
a runtime warning about failed assertion for "E_IS_SOURCE (source)" from
the e_source_unset_last_credentials_required_arguments() function.
The signal can be (rarely) received between the class' init() and
constructed() methods, thus before the object's `source` property
is set, leading to this runtime warning.
The fix is to listen for the "network-changed" signal only after
the constructed() function is called. It does not make much sense to do
it before that anyway.
---
src/libebackend/e-backend.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/libebackend/e-backend.c b/src/libebackend/e-backend.c
index 0af7240536..7932c54866 100644
--- a/src/libebackend/e-backend.c
+++ b/src/libebackend/e-backend.c
@@ -701,12 +701,18 @@ backend_constructed (GObject *object)
EBackend *backend;
ESource *source;
const gchar *extension_name;
+ gulong handler_id;
backend = E_BACKEND (object);
/* Chain up to parent's constructed() method. */
G_OBJECT_CLASS (e_backend_parent_class)->constructed (object);
+ handler_id = g_signal_connect (
+ backend->priv->network_monitor, "network-changed",
+ G_CALLBACK (backend_network_changed_cb), backend);
+ backend->priv->network_changed_handler_id = handler_id;
+
/* Get an initial GSocketConnectable from the data
* source's [Authentication] extension, if present. */
source = e_backend_get_source (backend);
@@ -854,7 +860,6 @@ static void
e_backend_init (EBackend *backend)
{
GNetworkMonitor *network_monitor;
- gulong handler_id;
backend->priv = e_backend_get_instance_private (backend);
backend->priv->prompter = e_user_prompter_new ();
@@ -874,11 +879,6 @@ e_backend_init (EBackend *backend)
network_monitor = e_network_monitor_get_default ();
backend->priv->network_monitor = g_object_ref (network_monitor);
backend->priv->online = g_network_monitor_get_network_available (network_monitor);
-
- handler_id = g_signal_connect (
- backend->priv->network_monitor, "network-changed",
- G_CALLBACK (backend_network_changed_cb), backend);
- backend->priv->network_changed_handler_id = handler_id;
}
/**
--
GitLab