Skip to content

Commit 6074df3

Browse files
Luca Bianconicmaglie
Luca Bianconi
andcommitted
fix: clear discovery manager when spawing a new one
Co-authored-by: Cristian Maglie <[email protected]>
1 parent 2b8d6d7 commit 6074df3

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

Diff for: arduino/cores/packagemanager/package_manager.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,11 @@ func (pmb *Builder) BuildIntoExistingPackageManager(target *PackageManager) {
9393
target.tempDir = pmb.tempDir
9494
target.packagesCustomGlobalProperties = pmb.packagesCustomGlobalProperties
9595
target.profile = pmb.profile
96-
target.discoveryManager = pmb.discoveryManager
96+
if target.discoveryManager != nil {
97+
target.discoveryManager.Clear()
98+
} else {
99+
target.discoveryManager = pmb.discoveryManager
100+
}
97101
target.userAgent = pmb.userAgent
98102
}
99103

Diff for: arduino/discovery/discovery.go

+1
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ func (disc *PluggableDiscovery) Quit() {
379379
if _, err := disc.waitMessage(time.Second * 5); err != nil {
380380
logrus.Errorf("Quitting discovery %s: %s", disc.id, err)
381381
}
382+
disc.stopSync()
382383
disc.killProcess()
383384
}
384385

Diff for: arduino/discovery/discoverymanager/discoverymanager.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,15 @@ func (dm *DiscoveryManager) Clear() {
6565
logrus.Infof("Closed and removed discovery %s", d.GetID())
6666
}
6767
}
68+
dm.discoveriesRunning = false
6869
dm.discoveries = map[string]*discovery.PluggableDiscovery{}
6970
}
7071

72+
// AreDiscoveriesRunning returns a boolean representing the running status of discoveries
73+
func (dm *DiscoveryManager) AreDiscoveriesRunning() bool {
74+
return dm.discoveriesRunning
75+
}
76+
7177
// IDs returns the list of discoveries' ids in this DiscoveryManager
7278
func (dm *DiscoveryManager) IDs() []string {
7379
ids := []string{}
@@ -194,12 +200,14 @@ func (dm *DiscoveryManager) startDiscovery(d *discovery.PluggableDiscovery) (dis
194200
return fmt.Errorf("%s: %s", tr("starting discovery %s", d.GetID()), err)
195201
}
196202

197-
go func() {
203+
go func(d *discovery.PluggableDiscovery) {
198204
// Transfer all incoming events from this discovery to the feed channel
199205
for ev := range eventCh {
206+
// here from discovery to discovery manager
200207
dm.feed <- ev
201208
}
202-
}()
209+
logrus.Infof("Discovery event channel closed %s. Exiting goroutine.", d.GetID())
210+
}(d)
203211
return nil
204212
}
205213

Diff for: commands/instances.go

+21-1
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,17 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
261261
},
262262
})
263263
}
264-
264+
var shouldRestartDiscovery bool
265265
{
266266
// We need to rebuild the PackageManager currently in use by this instance
267267
// in case this is not the first Init on this instances, that might happen
268268
// after reinitializing an instance after installing or uninstalling a core.
269269
// If this is not done the information of the uninstall core is kept in memory,
270270
// even if it should not.
271+
272+
// register whether the discoveries are running, if so we need to start them in
273+
// order for the previous watchers to keep receiving events
274+
shouldRestartDiscovery = areDiscoveriesRunning(instance.pm)
271275
pmb, commitPackageManager := instance.pm.NewBuilder()
272276

273277
loadBuiltinTools := func() []error {
@@ -443,6 +447,9 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
443447
responseError(s)
444448
}
445449

450+
if shouldRestartDiscovery {
451+
pme.DiscoveryManager().Start()
452+
}
446453
// Refreshes the locale used, this will change the
447454
// language of the CLI if the locale is different
448455
// after started.
@@ -451,6 +458,19 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
451458
return nil
452459
}
453460

461+
func areDiscoveriesRunning(pm *packagemanager.PackageManager) bool {
462+
if pm == nil {
463+
return false
464+
}
465+
exp, release := pm.NewExplorer()
466+
defer release()
467+
468+
if exp.DiscoveryManager() != nil && exp.DiscoveryManager().AreDiscoveriesRunning() {
469+
return true
470+
}
471+
return false
472+
}
473+
454474
// Destroy FIXMEDOC
455475
func Destroy(ctx context.Context, req *rpc.DestroyRequest) (*rpc.DestroyResponse, error) {
456476
if ok := instances.RemoveID(req.GetInstance().GetId()); !ok {

0 commit comments

Comments
 (0)