int tbl_cache_free(tbl_cache_p _tbc) { if(!_tbc) return -1; lock_get(&_tbc->sem); if(_tbc->dtp) tbl_free(_tbc->dtp); lock_destroy(&_tbc->sem); pkg_free(_tbc); return 0; }
static void roff_free1(struct roff *r) { struct tbl_node *tbl; struct eqn_node *e; int i; while (NULL != (tbl = r->first_tbl)) { r->first_tbl = tbl->next; tbl_free(tbl); } r->first_tbl = r->last_tbl = r->tbl = NULL; while (NULL != (e = r->first_eqn)) { r->first_eqn = e->next; eqn_free(e); } r->first_eqn = r->last_eqn = r->eqn = NULL; while (r->last) roffnode_pop(r); roff_freestr(r->strtab); roff_freestr(r->xmbtab); r->strtab = r->xmbtab = NULL; roff_freereg(r->regtab); r->regtab = NULL; if (r->xtab) for (i = 0; i < 128; i++) free(r->xtab[i].p); free(r->xtab); r->xtab = NULL; }