PVE::AccessControl::add_vm_to_pool($vmid, $pool) if $pool;
};
- my $realcmd = sub { PVE::LXC::lock_container($vmid, 1, $code); };
+ my $realcmd = sub { PVE::LXC::lock_config($vmid, $code); };
&$check_vmid_usage(); # first check before locking
PVE::Firewall::remove_vmfw_conf($vmid);
};
- my $realcmd = sub { PVE::LXC::lock_container($vmid, 1, $code); };
+ my $realcmd = sub { PVE::LXC::lock_config($vmid, $code); };
return $rpcenv->fork_worker('vzdestroy', $vmid, $authuser, $realcmd);
}});
return $rpcenv->fork_worker('vztemplate', $vmid, $authuser, $realcmd);
};
- PVE::LXC::lock_container($vmid, undef, $updatefn);
+ PVE::LXC::lock_config($vmid, $updatefn);
return undef;
}});
};
- return PVE::LXC::lock_container($vmid, undef, $clonefn);
+ return PVE::LXC::lock_config($vmid, $clonefn);
}});
return $rpcenv->fork_worker('resize', $vmid, $authuser, $realcmd);
};
- return PVE::LXC::lock_container($vmid, undef, $code);;
+ return PVE::LXC::lock_config($vmid, $code);;
}});
1;
PVE::LXC::update_lxc_config($storage_cfg, $vmid, $conf);
};
- PVE::LXC::lock_container($vmid, undef, $code);
+ PVE::LXC::lock_config($vmid, $code);
return undef;
}});
PVE::LXC::write_config($vmid, $conf, 1);
};
- PVE::LXC::lock_container($vmid, 10, $updatefn);
+ PVE::LXC::lock_config($vmid, $updatefn);
return undef;
}});
return $rpcenv->fork_worker('vzstart', $vmid, $authuser, $realcmd);
};
- return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+ return PVE::LXC::lock_config($vmid, $lockcmd);
}
}});
return $rpcenv->fork_worker('vzstop', $vmid, $authuser, $realcmd);
};
- return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+ return PVE::LXC::lock_config($vmid, $lockcmd);
}
}});
return $rpcenv->fork_worker('vzshutdown', $vmid, $authuser, $realcmd);
};
- return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+ return PVE::LXC::lock_config($vmid, $lockcmd);
}});
__PACKAGE__->register_method({
return $rpcenv->fork_worker('vzsuspend', $vmid, $authuser, $realcmd);
};
- return PVE::LXC::lock_container($vmid, 10, $lockcmd);
+ return PVE::LXC::lock_config($vmid, $lockcmd);
}});
__PACKAGE__->register_method({
my $vmid = $param->{vmid};
- PVE::LXC::lock_container($vmid, 5, sub {
+ PVE::LXC::lock_config($vmid, sub {
my $conf = PVE::LXC::load_config($vmid);
delete $conf->{lock};
PVE::LXC::write_config($vmid, $conf);
PVE::Tools::run_command($command);
};
- PVE::LXC::lock_container($vmid, undef, $do_fsck);
+ PVE::LXC::lock_config($vmid, $do_fsck);
return undef;
}});
use File::Path;
use File::Spec;
use Cwd qw();
-use Fcntl qw(O_RDONLY :flock);
+use Fcntl qw(O_RDONLY);
use PVE::Cluster qw(cfs_register_file cfs_read_file);
use PVE::Storage;
my $lock_handles = {};
my $lockdir = "/run/lock/lxc";
-sub lock_filename {
+sub config_file_lock {
my ($vmid) = @_;
return "$lockdir/pve-config-${vmid}.lock";
}
-sub lock_container {
+sub lock_config_full {
my ($vmid, $timeout, $code, @param) = @_;
- $timeout = 10 if !$timeout;
+ my $filename = config_file_lock($vmid);
- my $filename = lock_filename($vmid);
+ mkdir $lockdir if !-d $lockdir;
+
+ my $res = lock_file($filename, $timeout, $code, @param);
+
+ die $@ if $@;
+
+ return $res;
+}
+
+sub lock_config_mode {
+ my ($vmid, $timeout, $shared, $code, @param) = @_;
+
+ my $filename = config_file_lock($vmid);
mkdir $lockdir if !-d $lockdir;
- my $res = PVE::Tools::lock_file_full($filename, $timeout, 0, $code, @param);
+ my $res = lock_file_full($filename, $timeout, $shared, $code, @param);
die $@ if $@;
return $res;
}
+sub lock_config {
+ my ($vmid, $code, @param) = @_;
+
+ return lock_config_full($vmid, 10, $code, @param);
+}
+
sub option_exists {
my ($name) = @_;
write_config($vmid, $conf);
};
- lock_container($vmid, 10, $updatefn);
+ lock_config($vmid, $updatefn);
return $snap;
};
write_config($vmid, $conf);
};
- lock_container($vmid, 10 ,$updatefn);
+ lock_config($vmid ,$updatefn);
};
sub has_feature {
write_config($vmid, $conf);
};
- lock_container($vmid, 10, $updatefn);
+ lock_config($vmid, $updatefn);
my $storecfg = PVE::Storage::config();
my $err = $@;
if(!$err || ($err && $force)) {
- lock_container($vmid, 10, $del_snap);
+ lock_config($vmid, $del_snap);
if ($err) {
die "Can't delete snapshot: $vmid $snapname $err\n";
}
write_config($vmid, $conf);
};
- lock_container($vmid, 10, $updatefn);
+ lock_config($vmid, $updatefn);
PVE::Storage::volume_snapshot_rollback($storecfg, $volid, $snapname);
- lock_container($vmid, 5, $unlockfn);
+ lock_config($vmid, $unlockfn);
}
sub template_create {
sub lock_vm {
my ($self, $vmid, $code, @param) = @_;
- return PVE::LXC::lock_container($vmid, undef, $code, @param);
+ return PVE::LXC::lock_config($vmid, $code, @param);
}
sub prepare {
PVE::LXC::write_config($vmid, $conf);
};
- PVE::LXC::lock_container($vmid, 10, $lockconfig, ($self, $vmid));
+ PVE::LXC::lock_config($vmid, $lockconfig, ($self, $vmid));
}
sub unlock_vm {
}
};
- PVE::LXC::lock_container($vmid, 60, $unlockconfig, ($self, $vmid));
+ PVE::LXC::lock_config($vmid, $unlockconfig, ($self, $vmid));
}
sub snapshot {