From 2a4e8087929c12c7b388bdb53014cf67941ffb3c Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Thu, 1 Apr 2021 17:22:34 +0800 Subject: [PATCH] fix: avoid listener worker leak --- pkg/mcclient/catalog.go | 4 ++-- pkg/mcclient/mcclient.go | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/mcclient/catalog.go b/pkg/mcclient/catalog.go index 0c13987271..93e82b566c 100644 --- a/pkg/mcclient/catalog.go +++ b/pkg/mcclient/catalog.go @@ -30,7 +30,7 @@ type IServiceCatalogChangeListener interface { func (cli *Client) RegisterCatalogListener(l IServiceCatalogChangeListener) { cli.catalogListeners = append(cli.catalogListeners, l) if cli.GetServiceCatalog() != nil { - cli.listenerWorker.Run(func() { + listenerWorker.Run(func() { l.OnServiceCatalogChange(cli.GetServiceCatalog()) }, nil, nil) } @@ -38,7 +38,7 @@ func (cli *Client) RegisterCatalogListener(l IServiceCatalogChangeListener) { func (cli *Client) SetServiceCatalog(catalog IServiceCatalog) { cli._serviceCatalog = catalog - cli.listenerWorker.Run(func() { + listenerWorker.Run(func() { for i := range cli.catalogListeners { cli.catalogListeners[i].OnServiceCatalogChange(catalog) } diff --git a/pkg/mcclient/mcclient.go b/pkg/mcclient/mcclient.go index 3fb2a2bff7..e3aa07e512 100644 --- a/pkg/mcclient/mcclient.go +++ b/pkg/mcclient/mcclient.go @@ -37,6 +37,8 @@ import ( "yunion.io/x/onecloud/pkg/util/seclib2" ) +var listenerWorker *appsrv.SWorkerManager + type Client struct { authUrl string timeout int @@ -46,7 +48,10 @@ type Client struct { _serviceCatalog IServiceCatalog catalogListeners []IServiceCatalogChangeListener - listenerWorker *appsrv.SWorkerManager +} + +func init() { + listenerWorker = appsrv.NewWorkerManager("client_catalog_listener_worker", 1, 2048, false) } func NewClient(authUrl string, timeout int, debug bool, insecure bool, certFile, keyFile string) *Client { @@ -82,7 +87,6 @@ func NewClient(authUrl string, timeout int, debug bool, insecure bool, certFile, }, } - client.listenerWorker = appsrv.NewWorkerManager("client_catalog_listener_worker", 1, 2048, false) return &client }