Browse Source

codec: add atEndOfDecode() method to decDriver

This allows things like bincDecDriver return things to the pool.
Ugorji Nwoke 6 years ago
parent
commit
a540df977d
2 changed files with 5 additions and 0 deletions
  1. 3 0
      codec/decode.go
  2. 2 0
      codec/json.go

+ 3 - 0
codec/decode.go

@@ -126,6 +126,7 @@ type decDriver interface {
 	ReadMapEnd()
 
 	reset()
+	atEndOfDecode()
 	uncacheRead()
 }
 
@@ -151,6 +152,7 @@ func (x decDriverNoopContainerReader) ReadArrayEnd()           {}
 func (x decDriverNoopContainerReader) ReadMapStart() (v int)   { return }
 func (x decDriverNoopContainerReader) ReadMapEnd()             {}
 func (x decDriverNoopContainerReader) CheckBreak() (v bool)    { return }
+func (x decDriverNoopContainerReader) atEndOfDecode()          {}
 
 // func (x decDriverNoopContainerReader) ReadArrayElem()          {}
 // func (x decDriverNoopContainerReader) ReadMapElemKey()         {}
@@ -2545,6 +2547,7 @@ func (d *Decoder) mustDecode(v interface{}) {
 
 	d.bi.calls++
 	d.decode(v)
+	d.d.atEndOfDecode()
 	// xprintf.(">>>>>>>> >>>>>>>> num decFns: %v\n", d.cf.sn)
 	d.bi.calls--
 	if !d.h.ExplicitRelease && d.bi.calls == 0 {

+ 2 - 0
codec/json.go

@@ -1443,6 +1443,8 @@ func (d *jsonDecDriver) reset() {
 	// d.n.reset()
 }
 
+func (d *jsonDecDriver) atEndOfDecode() {}
+
 // jsonFloatStrconvFmtPrec ...
 //
 // ensure that every float has an 'e' or '.' in it,/ for easy differentiation from integers.