From d82c3f3b343af55136800c602fb7d938fb314bec Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 30 Oct 2024 12:19:53 +0100 Subject: [PATCH 1/2] In `compile` command try to release the package manager lock ASAP --- commands/service_compile.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/commands/service_compile.go b/commands/service_compile.go index 37f401397de..22aeed836d2 100644 --- a/commands/service_compile.go +++ b/commands/service_compile.go @@ -28,6 +28,7 @@ import ( "github.com/arduino/arduino-cli/commands/internal/instances" "github.com/arduino/arduino-cli/internal/arduino/builder" "github.com/arduino/arduino-cli/internal/arduino/cores" + "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" "github.com/arduino/arduino-cli/internal/arduino/sketch" "github.com/arduino/arduino-cli/internal/arduino/utils" @@ -77,9 +78,17 @@ func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.Ardu exportBinaries = *e } - pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) - if err != nil { + var pme *packagemanager.Explorer + var release func() + if _pme, _release, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { return err + } else { + pme = _pme + release = func() { + _release() + // Release once if called multiple times + _release = func() {} + } } defer release() @@ -358,6 +367,10 @@ func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.Ardu targetBoard.String(), "'build.board'", sketchBuilder.GetBuildProperties().Get("build.board")) + "\n")) } + // Release package manager + release() + + // Perform the actual build if err := sketchBuilder.Build(); err != nil { return &cmderrors.CompileFailedError{Message: err.Error()} } From 6cff8893da51f70955fba24d80483cb3d90510dc Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 21 Nov 2024 17:13:23 +0100 Subject: [PATCH 2/2] Applied suggestion from code review --- commands/service_compile.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/commands/service_compile.go b/commands/service_compile.go index 22aeed836d2..a7ce1ea2bbf 100644 --- a/commands/service_compile.go +++ b/commands/service_compile.go @@ -22,13 +22,13 @@ import ( "io" "sort" "strings" + "sync" "time" "github.com/arduino/arduino-cli/commands/cmderrors" "github.com/arduino/arduino-cli/commands/internal/instances" "github.com/arduino/arduino-cli/internal/arduino/builder" "github.com/arduino/arduino-cli/internal/arduino/cores" - "github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager" "github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager" "github.com/arduino/arduino-cli/internal/arduino/sketch" "github.com/arduino/arduino-cli/internal/arduino/utils" @@ -78,18 +78,11 @@ func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.Ardu exportBinaries = *e } - var pme *packagemanager.Explorer - var release func() - if _pme, _release, err := instances.GetPackageManagerExplorer(req.GetInstance()); err != nil { + pme, release, err := instances.GetPackageManagerExplorer(req.GetInstance()) + if err != nil { return err - } else { - pme = _pme - release = func() { - _release() - // Release once if called multiple times - _release = func() {} - } } + release = sync.OnceFunc(release) defer release() if pme.Dirty() {