void srl_deinit_iterator(pTHX_ srl_iterator_t *iter) { assert(iter != NULL); if (iter->dec) srl_destroy_decoder(aTHX_ iter->dec); if (iter->document) SvREFCNT_dec(iter->document); }
/* This is fired when we exit the Perl pseudo-block. * It frees our decoder and all. Put decoder-level cleanup * logic here so that we can simply use croak/longjmp for * exception handling. Makes life vastly easier! */ void srl_decoder_destructor_hook(pTHX_ void *p) { srl_decoder_t *dec = (srl_decoder_t *)p; assert(SRL_DEC_HAVE_OPTION(dec, SRL_F_DECODER_DESTRUCTOR_OK)); SRL_DEC_UNSET_OPTION(dec, SRL_F_DECODER_DESTRUCTOR_OK); /* Only free decoder if not for reuse */ if (!SRL_DEC_HAVE_OPTION(dec, SRL_F_REUSE_DECODER)) { srl_destroy_decoder(aTHX_ dec); } else { /* Clear instead - decoder reused */ srl_clear_decoder(aTHX_ dec); } }
void srl_destroy_iterator(pTHX_ srl_iterator_t *iter) { if (iter->stack) { srl_stack_destroy(aTHX_ iter->stack); Safefree(iter->stack); } if (iter->dec) srl_destroy_decoder(aTHX_ iter->dec); if (iter->document) SvREFCNT_dec(iter->document); if (iter->tmp_buf_owner) SvREFCNT_dec(iter->tmp_buf_owner); Safefree(iter); return; }