]> git.puffer.fish Git - matthieu/frr.git/commitdiff
vty: fix working in file-lock mode
authorIgor Ryzhov <iryzhov@nfware.com>
Wed, 27 Sep 2023 23:41:16 +0000 (02:41 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Wed, 27 Sep 2023 23:41:16 +0000 (02:41 +0300)
When the configuration node is entered in file-lock mode, candidate
and running datastores are locked. Any configuration change is followed
by an implicit commit which leads to a crash of mgmtd, because double
lock is prohibited by an assert. When working in file-lock mode, we
shouldn't do implicit commits which is disabled by allowing pending
configuration changes.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
lib/vty.c

index 15cc340eb0c5bb0140ebc27ea88d034194bea95f..ed8b71ed22d548d04ab5ba53cf4fef3504172789 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -2890,6 +2890,12 @@ int vty_config_enter(struct vty *vty, bool private_config, bool exclusive,
                }
                assert(vty->mgmt_locked_candidate_ds);
                assert(vty->mgmt_locked_running_ds);
+
+               /*
+                * As datastores are locked explicitly, we don't need implicit
+                * commits and should allow pending changes.
+                */
+               vty->pending_allowed = true;
        }
 
        vty->node = CONFIG_NODE;
@@ -2946,6 +2952,8 @@ int vty_config_node_exit(struct vty *vty)
 
        /* TODO: could we check for un-commited changes here? */
 
+       vty->pending_allowed = false;
+
        if (vty->mgmt_locked_running_ds)
                vty_mgmt_unlock_running_inline(vty);