const String& config, const Array::Ptr& errors, const Array::Ptr& diagnosticInformation)
{
{
- boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
+ boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex());
+
if (!ConfigPackageUtility::PackageExists("_api")) {
ConfigPackageUtility::CreatePackage("_api");
ArrayData results;
{
- boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
+ boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex());
+
for (const String& package : packages) {
results.emplace_back(new Dictionary({
{ "name", package },
}
try {
- boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
+ boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex());
+
ConfigPackageUtility::CreatePackage(packageName);
} catch (const std::exception& ex) {
HttpUtility::SendJsonError(response, params, 500, "Could not create package '" + packageName + "'.",
/* validation went fine, activate stage and reload */
if (pr.ExitStatus == 0) {
{
- boost::mutex::scoped_lock lock(GetStaticMutex());
+ boost::mutex::scoped_lock lock(GetStaticPackageMutex());
+
ActivateStage(packageName, stageName);
}
String ConfigPackageUtility::GetActiveStageFromFile(const String& packageName)
{
/* Lock the transaction, reading this only happens on startup or when something really is broken. */
- boost::mutex::scoped_lock lock(GetStaticMutex());
+ boost::mutex::scoped_lock lock(GetStaticActiveStageMutex());
String path = GetPackageDir() + "/" + packageName + "/active-stage";
void ConfigPackageUtility::SetActiveStageToFile(const String& packageName, const String& stageName)
{
- boost::mutex::scoped_lock lock(GetStaticMutex());
+ boost::mutex::scoped_lock lock(GetStaticActiveStageMutex());
String activeStagePath = GetPackageDir() + "/" + packageName + "/active-stage";
return (!boost::regex_search(name.GetData(), what, expr));
}
-boost::mutex& ConfigPackageUtility::GetStaticMutex()
+boost::mutex& ConfigPackageUtility::GetStaticPackageMutex()
+{
+ static boost::mutex mutex;
+ return mutex;
+}
+
+boost::mutex& ConfigPackageUtility::GetStaticActiveStageMutex()
{
static boost::mutex mutex;
return mutex;
static bool ContainsDotDot(const String& path);
static bool ValidateName(const String& name);
- static boost::mutex& GetStaticMutex();
+ static boost::mutex& GetStaticPackageMutex();
+ static boost::mutex& GetStaticActiveStageMutex();
private:
static void CollectDirNames(const String& path, std::vector<String>& dirs);
if (!files)
BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'files' must be specified."));
- boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
+ boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex());
+
stageName = ConfigPackageUtility::CreateStage(packageName, files);
/* validate the config. on success, activate stage and reload */