Browse Source

Ensure proper memory management by adding `Free` calls to release pooled buffers across `export`, `import`, and event handling workflows.

main
mleku 4 months ago
parent
commit
135508c390
No known key found for this signature in database
  1. 5
      app/handle-auth.go
  2. 5
      app/handle-event.go
  3. 2
      pkg/database/export.go
  4. 9
      pkg/database/import.go

5
app/handle-auth.go

@ -14,6 +14,11 @@ func (l *Listener) HandleAuth(b []byte) (err error) {
if rem, err = env.Unmarshal(b); chk.E(err) { if rem, err = env.Unmarshal(b); chk.E(err) {
return return
} }
defer func() {
if env != nil && env.Event != nil {
env.Event.Free()
}
}()
if len(rem) > 0 { if len(rem) > 0 {
log.I.F("extra '%s'", rem) log.I.F("extra '%s'", rem)
} }

5
app/handle-event.go

@ -21,6 +21,11 @@ func (l *Listener) HandleEvent(msg []byte) (err error) {
if msg, err = env.Unmarshal(msg); chk.E(err) { if msg, err = env.Unmarshal(msg); chk.E(err) {
return return
} }
defer func() {
if env != nil && env.E != nil {
env.E.Free()
}
}()
if len(msg) > 0 { if len(msg) > 0 {
log.I.F("extra '%s'", msg) log.I.F("extra '%s'", msg)
} }

2
pkg/database/export.go

@ -49,6 +49,7 @@ func (d *D) Export(c context.Context, w io.Writer, pubkeys ...[]byte) {
if _, err = w.Write([]byte{'\n'}); chk.E(err) { if _, err = w.Write([]byte{'\n'}); chk.E(err) {
return return
} }
ev.Free()
evBuf.Reset() evBuf.Reset()
} }
return return
@ -93,6 +94,7 @@ func (d *D) Export(c context.Context, w io.Writer, pubkeys ...[]byte) {
if _, err = w.Write([]byte{'\n'}); chk.E(err) { if _, err = w.Write([]byte{'\n'}); chk.E(err) {
continue continue
} }
ev.Free()
evBuf.Reset() evBuf.Reset()
} }
return return

9
pkg/database/import.go

@ -52,17 +52,22 @@ func (d *D) Import(rr io.Reader) {
continue continue
} }
ev := &event.E{} ev := event.New()
if _, err = ev.Unmarshal(b); err != nil { if _, err = ev.Unmarshal(b); err != nil {
// return the pooled buffer on error
ev.Free()
continue continue
} }
if _, _, err = d.SaveEvent(d.ctx, ev); err != nil { if _, _, err = d.SaveEvent(d.ctx, ev); err != nil {
// return the pooled buffer on error paths too
ev.Free()
continue continue
} }
// return the pooled buffer after successful save
ev.Free()
b = nil b = nil
ev = nil
count++ count++
if count%100 == 0 { if count%100 == 0 {
log.I.F("received %d events", count) log.I.F("received %d events", count)

Loading…
Cancel
Save