示例#1
0
文件: dlink.c 项目: rsenn/tichu
/* -------------------------------------------------------------------------- *
 * 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--;  
}
示例#2
0
文件: player.c 项目: rsenn/tichu
/* -------------------------------------------------------------------------- *
 * 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);
}
示例#3
0
/* -------------------------------------------------------------------------- *
 * -------------------------------------------------------------------------- */
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);
  }
示例#4
0
/* -------------------------------------------------------------------------- *
 * 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);
  }
}
示例#5
0
/* -------------------------------------------------------------------------- *
 * 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);
}