void srl_destroy_encoder(pTHX_ srl_encoder_t *enc) { Safefree(enc->buf_start); Safefree(enc->snappy_workmem); if (enc->ref_seenhash != NULL) PTABLE_free(enc->ref_seenhash); if (enc->str_seenhash != NULL) PTABLE_free(enc->str_seenhash); if (enc->weak_seenhash != NULL) PTABLE_free(enc->weak_seenhash); Safefree(enc); }
/* Explicit destructor */ void srl_destroy_decoder(pTHX_ srl_decoder_t *dec) { PTABLE_free(dec->ref_seenhash); if (dec->ref_stashes) { PTABLE_free(dec->ref_stashes); PTABLE_free(dec->ref_bless_av); } if (dec->weakref_av) { SvREFCNT_dec(dec->weakref_av); dec->weakref_av = NULL; } Safefree(dec); }
void srl_destroy_merger(pTHX_ srl_merger_t *mrg) { srl_buf_free_buffer(aTHX_ &mrg->obuf); srl_destroy_snappy_workmem(aTHX_ mrg->snappy_workmem); if (mrg->tracked_offsets) { srl_stack_destroy(aTHX_ mrg->tracked_offsets); Safefree(mrg->tracked_offsets); mrg->tracked_offsets = NULL; } if (mrg->tracked_offsets_tbl) { PTABLE_free(mrg->tracked_offsets_tbl); mrg->tracked_offsets_tbl = NULL; } if (mrg->string_deduper_tbl) { STRTABLE_free(mrg->string_deduper_tbl); mrg->string_deduper_tbl = NULL; } if (mrg->classname_deduper_tbl) { STRTABLE_free(mrg->classname_deduper_tbl); mrg->classname_deduper_tbl = NULL; } Safefree(mrg); }
void ddl_destructor_hook(void *p) { ddl_encoder_t *enc = (ddl_encoder_t *)p; /* Exception cleanup. Under normal operation, we should have * assigned NULL to buf_start after we're done. */ Safefree(enc->buf_start); PTABLE_free(enc->seenhash); Safefree(enc); }