From 0e3be7ce69f663f4a23a9cf9ed7d78a4f73fa91f Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 27 Jun 2022 12:49:47 +0200 Subject: [PATCH] Fix conduct build action from getting stuck when configuring chroot fails by moving the creation of the process session below configuring the chroot --- librepomgr/buildactions/conductbuild.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/librepomgr/buildactions/conductbuild.cpp b/librepomgr/buildactions/conductbuild.cpp index f2215c7..a678806 100644 --- a/librepomgr/buildactions/conductbuild.cpp +++ b/librepomgr/buildactions/conductbuild.cpp @@ -971,16 +971,6 @@ InvocationResult ConductBuild::invokeMakechrootpkg( return InvocationResult::Error; } - // prepare process session - auto processSession = m_buildAction->makeBuildProcess(packageName + " build", packageProgress.buildDirectory + "/build.log", - std::bind(&ConductBuild::handleMakechrootpkgErrorsAndAddPackageToRepo, this, makepkgchrootSession, std::ref(packageName), - std::ref(packageProgress), std::placeholders::_1, std::placeholders::_2)); - processSession->registerNewDataHandler(BufferSearch("Updated version: ", "\e\n", "Starting build", - std::bind( - &ConductBuild::assignNewVersion, this, std::ref(packageName), std::ref(packageProgress), std::placeholders::_1, std::placeholders::_2))); - processSession->registerNewDataHandler(BufferSearch("Synchronizing chroot copy", "\n", std::string_view(), - [processSession = processSession.get()](BufferSearch &, std::string &&) { processSession->locks().pop_back(); })); - // lock the chroot directory to prevent other build tasks from using it m_buildAction->log()(Phrases::InfoMessage, "Building ", packageName, '\n'); auto chrootLock = m_setup.locks.acquireToWrite(m_buildAction->log(), std::string(buildRoot)); @@ -997,6 +987,16 @@ InvocationResult ConductBuild::invokeMakechrootpkg( return InvocationResult::Error; } + // prepare process session (after configuring chroot so we don't get stuck if configuring chroot fails) + auto processSession = m_buildAction->makeBuildProcess(packageName + " build", packageProgress.buildDirectory + "/build.log", + std::bind(&ConductBuild::handleMakechrootpkgErrorsAndAddPackageToRepo, this, makepkgchrootSession, std::ref(packageName), + std::ref(packageProgress), std::placeholders::_1, std::placeholders::_2)); + processSession->registerNewDataHandler(BufferSearch("Updated version: ", "\e\n", "Starting build", + std::bind( + &ConductBuild::assignNewVersion, this, std::ref(packageName), std::ref(packageProgress), std::placeholders::_1, std::placeholders::_2))); + processSession->registerNewDataHandler(BufferSearch("Synchronizing chroot copy", "\n", std::string_view(), + [processSession = processSession.get()](BufferSearch &, std::string &&) { processSession->locks().pop_back(); })); + // invoke makechrootpkg to build package m_buildAction->log()(Phrases::InfoMessage, "Invoking makechrootpkg for ", packageName, " via ", m_makeChrootPkgPath.string(), '\n', ps(Phrases::SubMessage), "build dir: ", packageProgress.buildDirectory, '\n', ps(Phrases::SubMessage), "chroot dir: ", chrootDir, '\n',