diff --git a/objectstore/cta-objectstore-initialize.cpp b/objectstore/cta-objectstore-initialize.cpp index 1ad3f104161fd5fcddf5d70f46298cee39983b56..ee9e6193b2951c60b6afa76c91580c4453ba0350 100644 --- a/objectstore/cta-objectstore-initialize.cpp +++ b/objectstore/cta-objectstore-initialize.cpp @@ -34,10 +34,10 @@ #include <stdexcept> int main(int argc, char ** argv) { + std::unique_ptr<cta::objectstore::Backend> be; try { cta::log::StdoutLogger logger(cta::utils::getShortHostname(), "cta-objectstore-initialize"); cta::log::LogContext lc(logger); - std::unique_ptr<cta::objectstore::Backend> be; if (1 == argc) { be.reset(new cta::objectstore::BackendVFS); } else if (2 == argc) { @@ -66,11 +66,17 @@ int main(int argc, char ** argv) { re.fetch(); re.addOrGetDriveRegisterPointerAndCommit(agr, el); re.addOrGetSchedulerGlobalLockAndCommit(agr,el); - ag.removeAndUnregisterSelf(lc); + { + cta::objectstore::ScopedExclusiveLock agentLock(ag); + ag.fetch(); + ag.removeAndUnregisterSelf(lc); + } rel.release(); std::cout << "New object store path: " << be->getParams()->toURL() << std::endl; + return EXIT_SUCCESS; } catch (std::exception & e) { - std::cerr << "Failed to initialise the root entry in a new VFS backend store" + std::cerr << "Failed to initialise the root entry in a new " << be->typeName() << " objectstore" << std::endl << e.what() << std::endl; + return EXIT_FAILURE; } }