Skip to content

Commit 289a314

Browse files
committed
networkmanager: Debounce unit change handler
firewalld_service's `changed` handler is called in bursts, for all the internal systemd property changes like unit start times. These are not interesting for firewall-client, and just lead to lots of duplicated handler calls. Remember the previous unit state, and short-circuit the handler immediately if there is no interesting change.
1 parent c224b30 commit 289a314

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

pkg/networkmanager/firewall-client.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -204,20 +204,24 @@ function initFirewalldDbus() {
204204

205205
firewalld_service.addEventListener('changed', () => {
206206
const installed = !!firewalld_service.exists;
207+
const is_running = firewalld_service.state === 'running';
208+
209+
// we get lots of these events, for internal property changes; filter interesting changes
210+
if (is_running === firewalld_service.prev_running && firewall.installed === installed)
211+
return;
212+
firewall.installed = installed;
213+
firewalld_service.prev_running = is_running;
214+
207215
debug("systemd service changed: exists", firewalld_service.exists, "state", firewalld_service.state,
208216
"firewall.enabled:", JSON.stringify(firewall.enabled));
209217

210218
/* HACK: cockpit.dbus() remains dead for non-activatable names, so reinitialize it if the service gets enabled and started
211219
* See https://github.com/cockpit-project/cockpit/pull/9125 */
212-
if (!firewall.enabled && firewalld_service.state == 'running') {
220+
if (!firewall.enabled && is_running) {
213221
debug("reinitializing D-Bus connection after unit got started");
214222
initFirewalldDbus();
215223
}
216224

217-
if (firewall.installed == installed)
218-
return;
219-
220-
firewall.installed = installed;
221225
firewall.dispatchEvent('changed');
222226
});
223227

0 commit comments

Comments
 (0)