This is an automated email from the ASF dual-hosted git repository.
tew pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git
The following commit(s) were added to refs/heads/master by this push:
new 623c02ef bugfix: fix connection leaks and potential nil pointer
panic(#991) (#997)
623c02ef is described below
commit 623c02ef5aebf1d86fcc6aa26e65faecf9337e64
Author: 花国栋 <[email protected]>
AuthorDate: Sat Dec 20 15:53:31 2025 +0800
bugfix: fix connection leaks and potential nil pointer panic(#991) (#997)
* bugfix: fix connection leaks and potential nil pointer panic(#991)
* bugfix: fix connection leaks and potential nil pointer panic(#991)
---------
Co-authored-by: jimin <[email protected]>
Co-authored-by: Tew <[email protected]>
Co-authored-by: TewGuo <[email protected]>
---
changes/dev.md | 1 +
pkg/datasource/sql/async_worker.go | 1 +
pkg/datasource/sql/datasource/base/meta_cache.go | 1 +
pkg/datasource/sql/datasource/base/meta_cache_test.go | 17 +++++++----------
pkg/datasource/sql/db.go | 2 ++
5 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/changes/dev.md b/changes/dev.md
index 0c8e5acc..cfec2483 100755
--- a/changes/dev.md
+++ b/changes/dev.md
@@ -30,6 +30,7 @@
### bugfix:
- [[#130](https://github.com/apache/incubator-seata-go/pull/130)] getty
session auto close bug
+ - [[#991](https://github.com/apache/incubator-seata-go/issues/991)] fix
connection leaks and prevent nil pointer panic in async worker
### optimize:
diff --git a/pkg/datasource/sql/async_worker.go
b/pkg/datasource/sql/async_worker.go
index 44be4e86..aab6ddeb 100644
--- a/pkg/datasource/sql/async_worker.go
+++ b/pkg/datasource/sql/async_worker.go
@@ -190,6 +190,7 @@ func (aw *AsyncWorker) dealWithGroupedContexts(resID
string, phaseCtxs []phaseTw
for i := range phaseCtxs {
aw.commitQueue <- phaseCtxs[i]
}
+ return
}
defer conn.Close()
diff --git a/pkg/datasource/sql/datasource/base/meta_cache.go
b/pkg/datasource/sql/datasource/base/meta_cache.go
index 80652c4a..9eaea492 100644
--- a/pkg/datasource/sql/datasource/base/meta_cache.go
+++ b/pkg/datasource/sql/datasource/base/meta_cache.go
@@ -106,6 +106,7 @@ func (c *BaseTableMetaCache) refresh(ctx context.Context) {
if err != nil {
return
}
+ defer conn.Close()
v, err := c.trigger.LoadAll(ctx, c.cfg.DBName, conn, tables...)
if err != nil {
return
diff --git a/pkg/datasource/sql/datasource/base/meta_cache_test.go
b/pkg/datasource/sql/datasource/base/meta_cache_test.go
index e0a5ed61..dff26f0e 100644
--- a/pkg/datasource/sql/datasource/base/meta_cache_test.go
+++ b/pkg/datasource/sql/datasource/base/meta_cache_test.go
@@ -108,7 +108,6 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
cancel: cancel,
trigger: &mockTrigger{},
cfg: &mysql.Config{},
- db: &sql.DB{},
},
args: args{ctx: ctx},
want: testdata.MockWantTypesMeta("test"),
@@ -128,7 +127,6 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
cancel: cancel,
trigger: &mockTrigger{},
cfg: &mysql.Config{},
- db: &sql.DB{},
},
args: args{ctx: ctx},
want: testdata.MockWantTypesMeta("TEST"),
@@ -136,13 +134,12 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
-
- connStub := gomonkey.ApplyMethodFunc(tt.fields.db,
"Conn",
- func(_ context.Context) (*sql.Conn, error) {
- return &sql.Conn{}, nil
- })
-
- defer connStub.Reset()
+ // Use sqlmock to simulate a database connection
+ db, _, err := sqlmock.New()
+ if err != nil {
+ t.Fatalf("Failed to create sqlmock: %v", err)
+ }
+ defer db.Close()
loadAllStub :=
gomonkey.ApplyMethodFunc(tt.fields.trigger, "LoadAll",
func(_ context.Context, _ string, _ *sql.Conn,
_ ...string) ([]types.TableMeta, error) {
@@ -158,7 +155,7 @@ func TestBaseTableMetaCache_refresh(t *testing.T) {
cache: tt.fields.cache,
cancel: tt.fields.cancel,
trigger: tt.fields.trigger,
- db: tt.fields.db,
+ db: db,
cfg: tt.fields.cfg,
}
go c.refresh(tt.args.ctx)
diff --git a/pkg/datasource/sql/db.go b/pkg/datasource/sql/db.go
index d347b15b..9f260717 100644
--- a/pkg/datasource/sql/db.go
+++ b/pkg/datasource/sql/db.go
@@ -129,7 +129,9 @@ func (db *DBResource) init() {
conn, err := db.connector.Connect(ctx)
if err != nil {
log.Errorf("connect: %v", err)
+ return
}
+ defer conn.Close()
version, err := selectDBVersion(ctx, conn)
if err != nil {
log.Errorf("select db version: %v", err)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]