Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2493b56

Browse filesBrowse files
Bikappacmaglie
andauthored
fix: discovery cleanup and watchers continuity upon core install (#2062)
Co-authored-by: Cristian Maglie <c.maglie@arduino.cc>
1 parent 245e84c commit 2493b56
Copy full SHA for 2493b56

File tree

Expand file treeCollapse file tree

4 files changed

+45
-24
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+45
-24
lines changed

‎arduino/cores/packagemanager/package_manager.go

Copy file name to clipboardExpand all lines: arduino/cores/packagemanager/package_manager.go
+14-4Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,25 @@ func (pmb *Builder) BuildIntoExistingPackageManager(target *PackageManager) {
9898
target.tempDir = pmb.tempDir
9999
target.packagesCustomGlobalProperties = pmb.packagesCustomGlobalProperties
100100
target.profile = pmb.profile
101-
target.discoveryManager = pmb.discoveryManager
101+
target.discoveryManager.Clear()
102+
target.discoveryManager.AddAllDiscoveriesFrom(pmb.discoveryManager)
102103
target.userAgent = pmb.userAgent
103104
}
104105

105106
// Build builds a new PackageManager.
106107
func (pmb *Builder) Build() *PackageManager {
107-
res := &PackageManager{}
108-
pmb.BuildIntoExistingPackageManager(res)
109-
return res
108+
return &PackageManager{
109+
log: pmb.log,
110+
packages: pmb.packages,
111+
IndexDir: pmb.IndexDir,
112+
PackagesDir: pmb.PackagesDir,
113+
DownloadDir: pmb.DownloadDir,
114+
tempDir: pmb.tempDir,
115+
packagesCustomGlobalProperties: pmb.packagesCustomGlobalProperties,
116+
profile: pmb.profile,
117+
discoveryManager: pmb.discoveryManager,
118+
userAgent: pmb.userAgent,
119+
}
110120
}
111121

112122
// NewBuilder creates a Builder with the same configuration

‎arduino/cores/packagemanager/package_manager_test.go

Copy file name to clipboardExpand all lines: arduino/cores/packagemanager/package_manager_test.go
+20-18Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// Arduino software without disclosing the source code of your own applications.
1414
// To purchase a commercial license, send an email to license@arduino.cc.
1515

16-
package packagemanager_test
16+
package packagemanager
1717

1818
import (
1919
"fmt"
@@ -24,7 +24,6 @@ import (
2424
"testing"
2525

2626
"github.com/arduino/arduino-cli/arduino/cores"
27-
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2827
"github.com/arduino/arduino-cli/configuration"
2928
"github.com/arduino/go-paths-helper"
3029
"github.com/arduino/go-properties-orderedmap"
@@ -39,7 +38,7 @@ var dataDir1 = paths.New("testdata", "data_dir_1")
3938
var extraHardware = paths.New("testdata", "extra_hardware")
4039

4140
func TestFindBoardWithFQBN(t *testing.T) {
42-
pmb := packagemanager.NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
41+
pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
4342
pmb.LoadHardwareFromDirectory(customHardware)
4443
pm := pmb.Build()
4544
pme, release := pm.NewExplorer()
@@ -57,7 +56,7 @@ func TestFindBoardWithFQBN(t *testing.T) {
5756

5857
func TestResolveFQBN(t *testing.T) {
5958
// Pass nil, since these paths are only used for installing
60-
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
59+
pmb := NewBuilder(nil, nil, nil, nil, "test")
6160
// Hardware from main packages directory
6261
pmb.LoadHardwareFromDirectory(dataDir1.Join("packages"))
6362
// This contains the arduino:avr core
@@ -181,7 +180,7 @@ func TestResolveFQBN(t *testing.T) {
181180
}
182181

183182
func TestBoardOptionsFunctions(t *testing.T) {
184-
pmb := packagemanager.NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
183+
pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
185184
pmb.LoadHardwareFromDirectory(customHardware)
186185
pm := pmb.Build()
187186
pme, release := pm.NewExplorer()
@@ -221,13 +220,13 @@ func TestBoardOptionsFunctions(t *testing.T) {
221220
}
222221

223222
func TestBoardOrdering(t *testing.T) {
224-
pmb := packagemanager.NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, "")
223+
pmb := NewBuilder(dataDir1, dataDir1.Join("packages"), nil, nil, "")
225224
_ = pmb.LoadHardwareFromDirectories(paths.NewPathList(dataDir1.Join("packages").String()))
226225
pm := pmb.Build()
227226
pme, release := pm.NewExplorer()
228227
defer release()
229228

230-
pl := pme.FindPlatform(&packagemanager.PlatformReference{
229+
pl := pme.FindPlatform(&PlatformReference{
231230
Package: "arduino",
232231
PlatformArchitecture: "avr",
233232
})
@@ -273,7 +272,7 @@ func TestBoardOrdering(t *testing.T) {
273272
func TestFindToolsRequiredForBoard(t *testing.T) {
274273
os.Setenv("ARDUINO_DATA_DIR", dataDir1.String())
275274
configuration.Settings = configuration.Init("")
276-
pmb := packagemanager.NewBuilder(
275+
pmb := NewBuilder(
277276
dataDir1,
278277
configuration.PackagesDir(configuration.Settings),
279278
configuration.DownloadsDir(configuration.Settings),
@@ -314,7 +313,7 @@ func TestFindToolsRequiredForBoard(t *testing.T) {
314313
})
315314
require.NotNil(t, esptool0413)
316315

317-
testPlatform := pme.FindPlatformRelease(&packagemanager.PlatformReference{
316+
testPlatform := pme.FindPlatformRelease(&PlatformReference{
318317
Package: "test",
319318
PlatformArchitecture: "avr",
320319
PlatformVersion: semver.MustParse("1.1.0")})
@@ -407,7 +406,7 @@ func TestFindToolsRequiredForBoard(t *testing.T) {
407406
}
408407

409408
func TestIdentifyBoard(t *testing.T) {
410-
pmb := packagemanager.NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
409+
pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
411410
pmb.LoadHardwareFromDirectory(customHardware)
412411
pm := pmb.Build()
413412
pme, release := pm.NewExplorer()
@@ -434,12 +433,12 @@ func TestIdentifyBoard(t *testing.T) {
434433

435434
func TestPackageManagerClear(t *testing.T) {
436435
// Create a PackageManager and load the harware
437-
pmb := packagemanager.NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
436+
pmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
438437
pmb.LoadHardwareFromDirectory(customHardware)
439438
pm := pmb.Build()
440439

441440
// Creates another PackageManager but don't load the hardware
442-
emptyPmb := packagemanager.NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
441+
emptyPmb := NewBuilder(customHardware, customHardware, customHardware, customHardware, "test")
443442
emptyPm := emptyPmb.Build()
444443

445444
// Verifies they're not equal
@@ -448,15 +447,18 @@ func TestPackageManagerClear(t *testing.T) {
448447
// Clear the first PackageManager that contains loaded hardware
449448
emptyPmb.BuildIntoExistingPackageManager(pm)
450449

451-
// Verifies both PackageManagers are now equal
450+
// the discovery manager is maintained
451+
require.NotEqual(t, pm.discoveryManager, emptyPm.discoveryManager)
452+
// Verifies all other fields are assigned to target
453+
pm.discoveryManager = emptyPm.discoveryManager
452454
require.Equal(t, pm, emptyPm)
453455
}
454456

455457
func TestFindToolsRequiredFromPlatformRelease(t *testing.T) {
456458
// Create all the necessary data to load discoveries
457459
fakePath := paths.New("fake-path")
458460

459-
pmb := packagemanager.NewBuilder(fakePath, fakePath, fakePath, fakePath, "test")
461+
pmb := NewBuilder(fakePath, fakePath, fakePath, fakePath, "test")
460462
pack := pmb.GetOrCreatePackage("arduino")
461463

462464
{
@@ -559,13 +561,13 @@ func TestFindToolsRequiredFromPlatformRelease(t *testing.T) {
559561
}
560562

561563
func TestFindPlatformReleaseDependencies(t *testing.T) {
562-
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
564+
pmb := NewBuilder(nil, nil, nil, nil, "test")
563565
pmb.LoadPackageIndexFromFile(paths.New("testdata", "package_tooltest_index.json"))
564566
pm := pmb.Build()
565567
pme, release := pm.NewExplorer()
566568
defer release()
567569

568-
pl, tools, err := pme.FindPlatformReleaseDependencies(&packagemanager.PlatformReference{Package: "test", PlatformArchitecture: "avr"})
570+
pl, tools, err := pme.FindPlatformReleaseDependencies(&PlatformReference{Package: "test", PlatformArchitecture: "avr"})
569571
require.NoError(t, err)
570572
require.NotNil(t, pl)
571573
require.Len(t, tools, 3)
@@ -574,7 +576,7 @@ func TestFindPlatformReleaseDependencies(t *testing.T) {
574576

575577
func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
576578
// Pass nil, since these paths are only used for installing
577-
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
579+
pmb := NewBuilder(nil, nil, nil, nil, "test")
578580
// Hardware from main packages directory
579581
pmb.LoadHardwareFromDirectory(dataDir1.Join("packages"))
580582
pm := pmb.Build()
@@ -643,7 +645,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
643645
}
644646

645647
func TestRunPostInstall(t *testing.T) {
646-
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
648+
pmb := NewBuilder(nil, nil, nil, nil, "test")
647649
pm := pmb.Build()
648650
pme, release := pm.NewExplorer()
649651
defer release()

‎arduino/discovery/discovery.go

Copy file name to clipboardExpand all lines: arduino/discovery/discovery.go
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ func (disc *PluggableDiscovery) Quit() {
381381
if _, err := disc.waitMessage(time.Second * 5); err != nil {
382382
logrus.Errorf("Quitting discovery %s: %s", disc.id, err)
383383
}
384+
disc.stopSync()
384385
disc.killProcess()
385386
}
386387

‎arduino/discovery/discoverymanager/discoverymanager.go

Copy file name to clipboardExpand all lines: arduino/discovery/discoverymanager/discoverymanager.go
+10-2Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,13 @@ func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (dis
194194
return fmt.Errorf("%s: %s", tr("starting discovery %s", d.GetID()), err)
195195
}
196196

197-
go func() {
197+
go func(d *discovery.PluggableDiscovery) {
198198
// Transfer all incoming events from this discovery to the feed channel
199199
for ev := range eventCh {
200200
dm.feed <- ev
201201
}
202-
}()
202+
logrus.Infof("Discovery event channel closed %s. Exiting goroutine.", d.GetID())
203+
}(d)
203204
return nil
204205
}
205206

@@ -276,3 +277,10 @@ func (dm *DiscoveryManager) List() []*discovery.Port {
276277
}
277278
return res
278279
}
280+
281+
// AddAllDiscoveriesFrom transfers discoveries from src to the receiver
282+
func (dm *DiscoveryManager) AddAllDiscoveriesFrom(src *DiscoveryManager) {
283+
for _, d := range src.discoveries {
284+
dm.Add(d)
285+
}
286+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.