diff options
author | Thomas Haller <thaller@redhat.com> | 2021-08-02 12:57:43 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-08-06 14:35:33 +0200 |
commit | 9debc3d028f8eca84ae402b9bf920ce6448c6f60 (patch) | |
tree | 7c57d5f4f7b4dd5c0b96d406386d35fe0dcbfcdd | |
parent | b55f95abfa02e9199e93a4598d1175abe21812a3 (diff) | |
download | NetworkManager-9debc3d028f8eca84ae402b9bf920ce6448c6f60.tar.gz |
firewalld: track current name_owner in NMFirewalldManager
Not only track whether we have a name-owner, but also which.
-rw-r--r-- | src/core/nm-firewalld-manager.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/core/nm-firewalld-manager.c b/src/core/nm-firewalld-manager.c index 1078529a42..3c80b45772 100644 --- a/src/core/nm-firewalld-manager.c +++ b/src/core/nm-firewalld-manager.c @@ -30,10 +30,11 @@ typedef struct { CList pending_calls; + char *name_owner; + guint name_owner_changed_id; bool dbus_inited : 1; - bool running : 1; } NMFirewalldManagerPrivate; struct _NMFirewalldManager { @@ -154,7 +155,7 @@ _get_running(NMFirewalldManagerPrivate *priv) * service is indeed running. That is the time when we queue the * requests, and they will be started once the get-name-owner call * returns. */ - return priv->running || (priv->dbus_connection && !priv->dbus_inited); + return priv->name_owner || (priv->dbus_connection && !priv->dbus_inited); } gboolean @@ -315,7 +316,7 @@ _handle_dbus_start(NMFirewalldManager *self, NMFirewalldManagerCallId *call_id) GVariant * arg; nm_assert(call_id); - nm_assert(priv->running); + nm_assert(priv->name_owner); nm_assert(!call_id->is_idle); nm_assert(c_list_contains(&priv->pending_calls, &call_id->lst)); @@ -378,10 +379,10 @@ _start_request(NMFirewalldManager * self, iface, NM_PRINT_FMT_QUOTED(zone, "\"", zone, "\"", "default"), call_id->is_idle ? " (not running, simulate success)" - : (!priv->running ? " (waiting to initialize)" : "")); + : (!priv->name_owner ? " (waiting to initialize)" : "")); if (!call_id->is_idle) { - if (priv->running) + if (priv->name_owner) _handle_dbus_start(self, call_id); if (!call_id->callback) { /* if the user did not provide a callback, the call_id is useless. @@ -463,6 +464,7 @@ name_owner_changed(NMFirewalldManager *self, const char *owner) gboolean was_running; gboolean now_running; gboolean just_initied; + gboolean name_owner_changed; owner = nm_str_not_empty(owner); @@ -474,8 +476,8 @@ name_owner_changed(NMFirewalldManager *self, const char *owner) was_running = _get_running(priv); just_initied = !priv->dbus_inited; - priv->dbus_inited = TRUE; - priv->running = !!owner; + priv->dbus_inited = TRUE; + name_owner_changed = nm_strdup_reset(&priv->name_owner, owner); now_running = _get_running(priv); @@ -495,7 +497,7 @@ name_owner_changed(NMFirewalldManager *self, const char *owner) nm_assert(!call_id->is_idle); nm_assert(call_id->dbus.arg); - if (priv->running) { + if (priv->name_owner) { _LOGD(call_id, "initalizing: make D-Bus call"); _handle_dbus_start(self, call_id); } else { @@ -511,7 +513,7 @@ name_owner_changed(NMFirewalldManager *self, const char *owner) } } - if (was_running != now_running) + if (was_running != now_running || name_owner_changed) g_signal_emit(self, signals[STATE_CHANGED], 0, FALSE); } @@ -541,7 +543,7 @@ get_name_owner_cb(const char *name_owner, GError *error, gpointer user_data) NMFirewalldManager * self; NMFirewalldManagerPrivate *priv; - if (!name_owner && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + if (nm_utils_error_is_cancelled(error)) return; self = user_data; |