From 85d6d45cf17e5f65856cd39dca1b523afe1ed81b Mon Sep 17 00:00:00 2001 From: Nikitin Aleksandr Date: Thu, 3 Apr 2025 16:23:44 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20contextm?= =?UTF-8?q?ain.SetContext(ctx)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- camunda_connect/camunda_connect.go | 5 ++- camunda_connect2/camunda_connect2.go | 5 ++- chatgpt_connect/chatgpt_connect.go | 5 ++- chatgpt_proxy/chatgpt_proxy.go | 5 ++- contextmain/contextmain.go | 34 ++++++++++++++----- email/email.go | 5 ++- email_imap/email_imap.go | 5 ++- fiber_connect/fiber_connect.go | 5 ++- kafka_connect/kafka_connect.go | 5 ++- liveness/liveness.go | 5 ++- minio_connect/minio_connect.go | 5 ++- mssql_connect/mssql_connect.go | 5 ++- mssql_gorm/mssql_gorm.go | 5 ++- nats_connect/nats_connect.go | 5 ++- nats_liveness/nats_liveness.go | 5 ++- postgres_connect/postgres_connect.go | 5 ++- postgres_gorm/postgres_gorm.go | 5 ++- postgres_gorm2/postgres_gorm2.go | 5 ++- postgres_pgx/postgres_pgx.go | 5 ++- postgres_stek/postgres_stek.go | 5 ++- .../sync_exchange_connect.go | 5 ++- telegram_bot/telegram_bot.go | 5 ++- telegram_client/telegram_client.go | 5 ++- tinkoff_connect/tinkoff_connect.go | 5 ++- whatsapp_connect/whatsapp_connect.go | 5 ++- 25 files changed, 121 insertions(+), 33 deletions(-) diff --git a/camunda_connect/camunda_connect.go b/camunda_connect/camunda_connect.go index 9ad59d45..d3d6b4d9 100644 --- a/camunda_connect/camunda_connect.go +++ b/camunda_connect/camunda_connect.go @@ -257,7 +257,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, HandleJob func(c var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/camunda_connect2/camunda_connect2.go b/camunda_connect2/camunda_connect2.go index a2ca8b54..33872641 100644 --- a/camunda_connect2/camunda_connect2.go +++ b/camunda_connect2/camunda_connect2.go @@ -217,7 +217,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, HandleJob func(c var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/chatgpt_connect/chatgpt_connect.go b/chatgpt_connect/chatgpt_connect.go index 7385618c..45beb227 100644 --- a/chatgpt_connect/chatgpt_connect.go +++ b/chatgpt_connect/chatgpt_connect.go @@ -163,7 +163,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/chatgpt_proxy/chatgpt_proxy.go b/chatgpt_proxy/chatgpt_proxy.go index 1a2b7f2e..7baab1f8 100644 --- a/chatgpt_proxy/chatgpt_proxy.go +++ b/chatgpt_proxy/chatgpt_proxy.go @@ -159,7 +159,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/contextmain/contextmain.go b/contextmain/contextmain.go index fdd35b79..f294487f 100644 --- a/contextmain/contextmain.go +++ b/contextmain/contextmain.go @@ -18,24 +18,26 @@ var CancelContext func() // onceCtx - гарантирует единственное создание контеста var onceCtx sync.Once -// lockContextMain - гарантирует единственное создание контеста -// var lockContextMain sync.Mutex +// MutexContextMain - гарантирует единственное создание контеста +var MutexContextMain sync.RWMutex // GetContext - возвращает глобальный контекст приложения func GetContext() context.Context { - //lockContextMain.Lock() - //defer lockContextMain.Unlock() - // + MutexContextMain.RLock() + defer MutexContextMain.RUnlock() + //if Ctx == nil { // CtxBg := context.Background() // Ctx, CancelContext = context.WithCancel(CtxBg) //} onceCtx.Do(func() { - CtxBg := context.Background() - var Ctx0 context.Context - Ctx0, CancelContext = context.WithCancel(CtxBg) - Ctx = &Ctx0 + if Ctx == nil { //можно заполнить свой контекст, поэтому if + CtxBg := context.Background() + var Ctx0 context.Context + Ctx0, CancelContext = context.WithCancel(CtxBg) + Ctx = &Ctx0 + } }) return *Ctx @@ -50,3 +52,17 @@ func GetNewContext() context.Context { return *Ctx } + +// SetContext - устанавливает глобальный контекст, с учётом Mutex +func SetContext(ctx *context.Context) { + MutexContextMain.Lock() + defer MutexContextMain.Unlock() + Ctx = ctx +} + +// SetCancelContext - устанавливает функцию глобального отмены контекста, с учётом Mutex +func SetCancelContext(cancelContext func()) { + MutexContextMain.Lock() + defer MutexContextMain.Unlock() + CancelContext = cancelContext +} diff --git a/email/email.go b/email/email.go index 38444db7..783d1538 100644 --- a/email/email.go +++ b/email/email.go @@ -259,7 +259,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/email_imap/email_imap.go b/email_imap/email_imap.go index 8fa10851..711ff81b 100644 --- a/email_imap/email_imap.go +++ b/email_imap/email_imap.go @@ -289,7 +289,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/fiber_connect/fiber_connect.go b/fiber_connect/fiber_connect.go index ad2e88fa..7c20c05b 100644 --- a/fiber_connect/fiber_connect.go +++ b/fiber_connect/fiber_connect.go @@ -145,7 +145,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) { //var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/kafka_connect/kafka_connect.go b/kafka_connect/kafka_connect.go index 9fba0c37..7680f3fa 100644 --- a/kafka_connect/kafka_connect.go +++ b/kafka_connect/kafka_connect.go @@ -120,7 +120,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/liveness/liveness.go b/liveness/liveness.go index a59f48b4..ef093e14 100644 --- a/liveness/liveness.go +++ b/liveness/liveness.go @@ -49,7 +49,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) { //var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/minio_connect/minio_connect.go b/minio_connect/minio_connect.go index 92afbf98..04faae66 100644 --- a/minio_connect/minio_connect.go +++ b/minio_connect/minio_connect.go @@ -217,7 +217,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/mssql_connect/mssql_connect.go b/mssql_connect/mssql_connect.go index 60da6239..9a66a1c9 100644 --- a/mssql_connect/mssql_connect.go +++ b/mssql_connect/mssql_connect.go @@ -223,7 +223,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/mssql_gorm/mssql_gorm.go b/mssql_gorm/mssql_gorm.go index 8e170443..ef95eabb 100644 --- a/mssql_gorm/mssql_gorm.go +++ b/mssql_gorm/mssql_gorm.go @@ -237,7 +237,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/nats_connect/nats_connect.go b/nats_connect/nats_connect.go index b2394c10..bd9bd6fa 100644 --- a/nats_connect/nats_connect.go +++ b/nats_connect/nats_connect.go @@ -88,7 +88,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, ServiceName stri var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/nats_liveness/nats_liveness.go b/nats_liveness/nats_liveness.go index 8d3bd925..275d66cb 100644 --- a/nats_liveness/nats_liveness.go +++ b/nats_liveness/nats_liveness.go @@ -212,7 +212,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, ServiceName stri var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/postgres_connect/postgres_connect.go b/postgres_connect/postgres_connect.go index 22136536..4f2ab311 100644 --- a/postgres_connect/postgres_connect.go +++ b/postgres_connect/postgres_connect.go @@ -235,7 +235,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/postgres_gorm/postgres_gorm.go b/postgres_gorm/postgres_gorm.go index 901c5b7e..b1d455c7 100644 --- a/postgres_gorm/postgres_gorm.go +++ b/postgres_gorm/postgres_gorm.go @@ -295,7 +295,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/postgres_gorm2/postgres_gorm2.go b/postgres_gorm2/postgres_gorm2.go index 66f9ac82..1d842e99 100644 --- a/postgres_gorm2/postgres_gorm2.go +++ b/postgres_gorm2/postgres_gorm2.go @@ -297,7 +297,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/postgres_pgx/postgres_pgx.go b/postgres_pgx/postgres_pgx.go index e16c58d4..07d31dec 100644 --- a/postgres_pgx/postgres_pgx.go +++ b/postgres_pgx/postgres_pgx.go @@ -266,7 +266,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/postgres_stek/postgres_stek.go b/postgres_stek/postgres_stek.go index 7ffe3e6e..084c7a5b 100644 --- a/postgres_stek/postgres_stek.go +++ b/postgres_stek/postgres_stek.go @@ -293,7 +293,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, Connection conne var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/sync_exchange_connect/sync_exchange_connect.go b/sync_exchange_connect/sync_exchange_connect.go index d06eb739..583d6cf6 100644 --- a/sync_exchange_connect/sync_exchange_connect.go +++ b/sync_exchange_connect/sync_exchange_connect.go @@ -66,7 +66,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, ServiceName, Ser var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/telegram_bot/telegram_bot.go b/telegram_bot/telegram_bot.go index f6a2daf6..cfaad66d 100644 --- a/telegram_bot/telegram_bot.go +++ b/telegram_bot/telegram_bot.go @@ -264,7 +264,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) error { var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/telegram_client/telegram_client.go b/telegram_client/telegram_client.go index ee2d67b3..b60fffe5 100644 --- a/telegram_client/telegram_client.go +++ b/telegram_client/telegram_client.go @@ -854,7 +854,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, func_OnNewMessag var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() } diff --git a/tinkoff_connect/tinkoff_connect.go b/tinkoff_connect/tinkoff_connect.go index c4636b5a..ccc8ffed 100644 --- a/tinkoff_connect/tinkoff_connect.go +++ b/tinkoff_connect/tinkoff_connect.go @@ -155,7 +155,10 @@ func Start() { // wg - глобальный WaitGroup приложения func Start_ctx(ctx *context.Context, wg *sync.WaitGroup) error { var err error - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx stopapp.SetWaitGroup_Main(wg) err = Connect_err() diff --git a/whatsapp_connect/whatsapp_connect.go b/whatsapp_connect/whatsapp_connect.go index d242a345..2cfa18c1 100644 --- a/whatsapp_connect/whatsapp_connect.go +++ b/whatsapp_connect/whatsapp_connect.go @@ -327,7 +327,10 @@ func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup, eventHandler fun var err error //запомним к себе контекст - contextmain.Ctx = ctx + if contextmain.Ctx != ctx { + contextmain.SetContext(ctx) + } + //contextmain.Ctx = ctx if ctx == nil { contextmain.GetContext() }