diff --git a/services/analyzers.go b/services/analyzers.go index b0eeca095..112213e82 100644 --- a/services/analyzers.go +++ b/services/analyzers.go @@ -84,28 +84,30 @@ func (anz *AnalyzerService) Start() (err error) { anz.server.SetAnalyzer(anz.anz) anz.rpc = v1.NewAnalyzerSv1(anz.anz) //separa in propria functie - go func() { - var fS *engine.FilterS - select { - case <-anz.stopChan: - return - case fS = <-anz.filterSChan: - if !anz.IsRunning() { - return - } - anz.Lock() - defer anz.Unlock() - anz.filterSChan <- fS - anz.anz.SetFilterS(fS) - } - if !anz.cfg.DispatcherSCfg().Enabled { - anz.server.RpcRegister(anz.rpc) - } - anz.connChan <- anz.rpc - }() + go anz.start() return } +func (anz *AnalyzerService) start() { + var fS *engine.FilterS + select { + case <-anz.stopChan: + return + case fS = <-anz.filterSChan: + if !anz.IsRunning() { + return + } + anz.Lock() + defer anz.Unlock() + anz.filterSChan <- fS + anz.anz.SetFilterS(fS) + } + if !anz.cfg.DispatcherSCfg().Enabled { + anz.server.RpcRegister(anz.rpc) + } + anz.connChan <- anz.rpc +} + // Reload handles the change of config func (anz *AnalyzerService) Reload() (err error) { return // for the momment nothing to reload diff --git a/services/analyzers_it_test.go b/services/analyzers_it_test.go index 54e1e3987..b144d2a76 100644 --- a/services/analyzers_it_test.go +++ b/services/analyzers_it_test.go @@ -102,3 +102,23 @@ func TestAnalyzerSReload(t *testing.T) { t.Fatal(err) } } + +func TestAnalyzerSReload2(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + if err := os.MkdirAll("/tmp/analyzers", 0700); err != nil { + t.Fatal(err) + } + utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) + utils.Logger.SetLogLevel(7) + shdChan := utils.NewSyncedChan() + filterSChan := make(chan *engine.FilterS, 1) + filterSChan <- nil + server := cores.NewServer(nil) + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + anzRPC := make(chan rpcclient.ClientConnector, 1) + anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, anzRPC, srvDep) + anz.stopChan = make(chan struct{}) + anz.start() + close(anz.stopChan) + anz.start() +}