From: Fabian Grünbichler <f.gruenbich...@proxmox.com>

and check_lock before forking as well

Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com>
Tested-by: Fabian Ebner <f.eb...@proxmox.com>
---
 src/PVE/API2/LXC.pm | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
index 148ba6a..21899d0 100644
--- a/src/PVE/API2/LXC.pm
+++ b/src/PVE/API2/LXC.pm
@@ -646,20 +646,28 @@ __PACKAGE__->register_method({
        my $vmid = $param->{vmid};
 
        # test if container exists
+
        my $conf = PVE::LXC::Config->load_config($vmid);
-       my $storage_cfg = cfs_read_file("storage.cfg");
-       PVE::LXC::Config->check_protection($conf, "can't remove CT $vmid");
+       my $early_checks = sub {
+           my ($conf) = @_;
+           PVE::LXC::Config->check_protection($conf, "can't remove CT $vmid");
+           PVE::LXC::Config->check_lock($conf);
 
-       my $ha_managed = PVE::HA::Config::service_is_configured("ct:$vmid");
+           my $ha_managed = PVE::HA::Config::service_is_configured("ct:$vmid");
 
-       if (!$param->{purge}) {
-           die "unable to remove CT $vmid - used in HA resources and purge 
parameter not set.\n"
-               if $ha_managed;
+           if (!$param->{purge}) {
+               die "unable to remove CT $vmid - used in HA resources and purge 
parameter not set.\n"
+                   if $ha_managed;
 
-           # do not allow destroy if there are replication jobs without purge
-           my $repl_conf = PVE::ReplicationConfig->new();
-           $repl_conf->check_for_existing_jobs($vmid);
-       }
+               # do not allow destroy if there are replication jobs without 
purge
+               my $repl_conf = PVE::ReplicationConfig->new();
+               $repl_conf->check_for_existing_jobs($vmid);
+           }
+
+           return $ha_managed;
+       };
+
+       $early_checks->($conf);
 
        my $running_error_msg = "unable to destroy CT $vmid - container is 
running\n";
        die $running_error_msg if !$param->{force} && 
PVE::LXC::check_running($vmid); # check early
@@ -667,7 +675,7 @@ __PACKAGE__->register_method({
        my $code = sub {
            # reload config after lock
            $conf = PVE::LXC::Config->load_config($vmid);
-           PVE::LXC::Config->check_lock($conf);
+           my $ha_managed = $early_checks->($conf);
 
            if (PVE::LXC::check_running($vmid)) {
                die $running_error_msg if !$param->{force};
@@ -679,6 +687,7 @@ __PACKAGE__->register_method({
                }
            }
 
+           my $storage_cfg = cfs_read_file("storage.cfg");
            PVE::LXC::destroy_lxc_container($storage_cfg, $vmid, $conf, { lock 
=> 'destroyed' });
 
            PVE::AccessControl::remove_vm_access($vmid);
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to