示例#1
0
文件: locks.c 项目: BIRD/bird
static void
olock_free(resource *r)
{
  struct object_lock *q, *l = (struct object_lock *) r;
  node *n;

  DBG("olock: Freeing %p\n", l);
  switch (l->state)
    {
    case OLOCK_STATE_FREE:
      break;
    case OLOCK_STATE_LOCKED:
    case OLOCK_STATE_EVENT:
      rem_node(&l->n);
      n = HEAD(l->waiters);
      if (n->next)
	{
	  DBG("olock: -> %p becomes locked\n", n);
	  q = SKIP_BACK(struct object_lock, n, n);
	  rem_node(n);
	  add_tail_list(&q->waiters, &l->waiters);
	  q->state = OLOCK_STATE_EVENT;
	  add_head(&olock_list, n);
	  ev_schedule(olock_event);
	}
      break;
    case OLOCK_STATE_WAITING:
      rem_node(&l->n);
      break;
    default:
      ASSERT(0);
    }
示例#2
0
文件: bgp.c 项目: rogerhu/dd-wrt
void
bgp_stop(struct bgp_proto *p, unsigned subcode)
{
    proto_notify_state(&p->p, PS_STOP);
    bgp_graceful_close_conn(&p->outgoing_conn, subcode);
    bgp_graceful_close_conn(&p->incoming_conn, subcode);
    ev_schedule(p->event);
}
示例#3
0
文件: conf.c 项目: BIRD/bird
void
config_del_obstacle(struct config *c)
{
  DBG("+++ deleting obstacle %d\n", c->obstacle_count);
  c->obstacle_count--;
  if (!c->obstacle_count)
    ev_schedule(config_event);
}
示例#4
0
文件: bgp.c 项目: rogerhu/dd-wrt
void
bgp_conn_enter_idle_state(struct bgp_conn *conn)
{
    struct bgp_proto *p = conn->bgp;
    int os = conn->state;

    bgp_close_conn(conn);
    bgp_conn_set_state(conn, BS_IDLE);
    ev_schedule(p->event);

    if (os == BS_ESTABLISHED)
        bgp_conn_leave_established_state(p);
}
示例#5
0
文件: cli.c 项目: yubo/bird
struct cli *
cli_new(void *priv)
{
  struct pool *p = rp_new(cli_pool, "CLI");
  struct cli *c = mb_alloc(p, sizeof(struct cli));

  bzero(c, sizeof(struct cli));
  c->pool = p;
  c->priv = priv;
  c->event = ev_new(p);
  c->event->hook = cli_event;
  c->event->data = c;
  c->cont = cli_hello;
  c->parser_pool = lp_new(c->pool, 4096);
  c->rx_buf = mb_alloc(c->pool, CLI_RX_BUF_SIZE);
  ev_schedule(c->event);
  return c;
}
示例#6
0
文件: cli.c 项目: yubo/bird
void
cli_kick(struct cli *c)
{
  if (!c->cont && !c->tx_pos)
    ev_schedule(c->event);
}
示例#7
0
文件: cli.c 项目: yubo/bird
void
cli_written(struct cli *c)
{
  cli_free_out(c);
  ev_schedule(c->event);
}