/* -------------------------------------------------------------------------- * * Free a dlink node * * -------------------------------------------------------------------------- */ void dlink_node_free(struct node *nptr) { /* Free node block */ mem_static_free(&dlink_heap, nptr); mem_static_collect(&dlink_heap); /* Update dlink_node statistics */ dlink_count--; }
/* -------------------------------------------------------------------------- * * Delete a player. * * -------------------------------------------------------------------------- */ void player_delete(struct player *player) { debug(player_log, "Destroying player block: %s", player->name); dlink_delete(&player_list, &player->node); player_release(player); mem_static_free(&player_heap, player); }
/* -------------------------------------------------------------------------- * * -------------------------------------------------------------------------- */ void chanmode_change_destroy(struct list *list) { struct chanmodechange *cmcptr; struct node *next; dlink_foreach_safe(list, cmcptr, next) { dlink_delete(list, &cmcptr->node); mem_static_free(&chanmode_heap, cmcptr); }
/* -------------------------------------------------------------------------- * * Hook when a lclient is released. * * -------------------------------------------------------------------------- */ static void lc_cookie_release(struct lclient *lcptr) { struct lc_cookie *cookie; cookie = lcptr->plugdata[LCLIENT_PLUGDATA_COOKIE]; if(cookie) { dlink_delete(&lc_cookie_list, &cookie->node); lcptr->plugdata[LCLIENT_PLUGDATA_COOKIE] = NULL; mem_static_free(&lc_cookie_heap, cookie); mem_static_collect(&lc_cookie_heap); } }
/* -------------------------------------------------------------------------- * * Hook before user/nick is validated * * -------------------------------------------------------------------------- */ static void lc_cookie_hook(struct lclient *lcptr) { struct lc_cookie *cookie; cookie = mem_static_alloc(&lc_cookie_heap); /* Add to pending cookie list */ if(lcptr->plugdata[LCLIENT_PLUGDATA_COOKIE]) mem_static_free(&lc_cookie_heap, lcptr->plugdata); lcptr->plugdata[LCLIENT_PLUGDATA_COOKIE] = cookie; cookie->lclient = lcptr; dlink_add_tail(&lc_cookie_list, &cookie->node, cookie); /* Build cookie data */ lc_cookie_build(cookie); /* Now send the cookie */ lclient_send(cookie->lclient, "PING :%s", cookie->data); }