From 9c89c01515d21dce1f572e499f4a416deffe246f Mon Sep 17 00:00:00 2001 From: kruskall <99559985+kruskall@users.noreply.github.com> Date: Thu, 14 Sep 2023 03:10:38 +0200 Subject: [PATCH 1/2] fix: do not try to reset nil objects --- features/pool/pool.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/features/pool/pool.go b/features/pool/pool.go index 7ae2a33..337dc61 100644 --- a/features/pool/pool.go +++ b/features/pool/pool.go @@ -50,6 +50,7 @@ func (p *pool) message(message *protogen.Message) { p.P(`}`) p.P(`func (m *`, ccTypeName, `) ResetVT() {`) + p.P(`if m != nil {`) var saved []*protogen.Field for _, field := range message.Fields { fieldName := field.GoName @@ -89,6 +90,7 @@ func (p *pool) message(message *protogen.Message) { p.P(`m.`, field.GoName, ` = `, fmt.Sprintf("f%d", i)) } p.P(`}`) + p.P(`}`) p.P(`func (m *`, ccTypeName, `) ReturnToVTPool() {`) p.P(`if m != nil {`) From b133c9c43bf295cb6fb472f0b75b79149f8d0783 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 20 Sep 2023 17:28:03 +0200 Subject: [PATCH 2/2] pool: update codegen Signed-off-by: Vicent Marti --- testproto/pool/pool_vtproto.pb.go | 4 +- testproto/pool/pool_with_oneof_vtproto.pb.go | 42 ++++++++++++------- .../pool/pool_with_slice_reuse_vtproto.pb.go | 20 +++++---- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/testproto/pool/pool_vtproto.pb.go b/testproto/pool/pool_vtproto.pb.go index 0c5a5f3..c36dc9e 100644 --- a/testproto/pool/pool_vtproto.pb.go +++ b/testproto/pool/pool_vtproto.pb.go @@ -169,7 +169,9 @@ var vtprotoPool_MemoryPoolExtension = sync.Pool{ } func (m *MemoryPoolExtension) ResetVT() { - m.Reset() + if m != nil { + m.Reset() + } } func (m *MemoryPoolExtension) ReturnToVTPool() { if m != nil { diff --git a/testproto/pool/pool_with_oneof_vtproto.pb.go b/testproto/pool/pool_with_oneof_vtproto.pb.go index 5894fd7..d7350db 100644 --- a/testproto/pool/pool_with_oneof_vtproto.pb.go +++ b/testproto/pool/pool_with_oneof_vtproto.pb.go @@ -866,7 +866,9 @@ var vtprotoPool_OneofTest_Test1 = sync.Pool{ } func (m *OneofTest_Test1) ResetVT() { - m.Reset() + if m != nil { + m.Reset() + } } func (m *OneofTest_Test1) ReturnToVTPool() { if m != nil { @@ -885,9 +887,11 @@ var vtprotoPool_OneofTest_Test2 = sync.Pool{ } func (m *OneofTest_Test2) ResetVT() { - f0 := m.B[:0] - m.Reset() - m.B = f0 + if m != nil { + f0 := m.B[:0] + m.Reset() + m.B = f0 + } } func (m *OneofTest_Test2) ReturnToVTPool() { if m != nil { @@ -906,7 +910,9 @@ var vtprotoPool_OneofTest_Test3_Element2 = sync.Pool{ } func (m *OneofTest_Test3_Element2) ResetVT() { - m.Reset() + if m != nil { + m.Reset() + } } func (m *OneofTest_Test3_Element2) ReturnToVTPool() { if m != nil { @@ -925,8 +931,10 @@ var vtprotoPool_OneofTest_Test3 = sync.Pool{ } func (m *OneofTest_Test3) ResetVT() { - m.C.ReturnToVTPool() - m.Reset() + if m != nil { + m.C.ReturnToVTPool() + m.Reset() + } } func (m *OneofTest_Test3) ReturnToVTPool() { if m != nil { @@ -945,16 +953,18 @@ var vtprotoPool_OneofTest = sync.Pool{ } func (m *OneofTest) ResetVT() { - if oneof, ok := m.Test.(*OneofTest_Test1_); ok { - oneof.Test1.ReturnToVTPool() - } - if oneof, ok := m.Test.(*OneofTest_Test2_); ok { - oneof.Test2.ReturnToVTPool() - } - if oneof, ok := m.Test.(*OneofTest_Test3_); ok { - oneof.Test3.ReturnToVTPool() + if m != nil { + if oneof, ok := m.Test.(*OneofTest_Test1_); ok { + oneof.Test1.ReturnToVTPool() + } + if oneof, ok := m.Test.(*OneofTest_Test2_); ok { + oneof.Test2.ReturnToVTPool() + } + if oneof, ok := m.Test.(*OneofTest_Test3_); ok { + oneof.Test3.ReturnToVTPool() + } + m.Reset() } - m.Reset() } func (m *OneofTest) ReturnToVTPool() { if m != nil { diff --git a/testproto/pool/pool_with_slice_reuse_vtproto.pb.go b/testproto/pool/pool_with_slice_reuse_vtproto.pb.go index 13298a1..288433f 100644 --- a/testproto/pool/pool_with_slice_reuse_vtproto.pb.go +++ b/testproto/pool/pool_with_slice_reuse_vtproto.pb.go @@ -668,9 +668,11 @@ var vtprotoPool_Test1 = sync.Pool{ } func (m *Test1) ResetVT() { - f0 := m.Sl[:0] - m.Reset() - m.Sl = f0 + if m != nil { + f0 := m.Sl[:0] + m.Reset() + m.Sl = f0 + } } func (m *Test1) ReturnToVTPool() { if m != nil { @@ -689,12 +691,14 @@ var vtprotoPool_Test2 = sync.Pool{ } func (m *Test2) ResetVT() { - for _, mm := range m.Sl { - mm.Reset() + if m != nil { + for _, mm := range m.Sl { + mm.Reset() + } + f0 := m.Sl[:0] + m.Reset() + m.Sl = f0 } - f0 := m.Sl[:0] - m.Reset() - m.Sl = f0 } func (m *Test2) ReturnToVTPool() { if m != nil {