示例#1
0
void pc_client_destroy(pc_client_t *client) {
  if(PC_ST_INITED == client->state) {
    pc__client_clear(client);
    goto finally;
  }

  if(PC_ST_CLOSED == client->state) {
    pc__client_clear(client);
    goto finally;
  }

  // 1. asyn worker thread
  // 2. wait work thread exit
  // 3. free client
  uv_async_send(client->close_async);

  pc_client_join(client);

  if(PC_ST_CLOSED != client->state) {
    pc_client_stop(client);
    // wait uv_loop_t stop
    sleep(1);
    pc__client_clear(client);
  }

finally:
  if(client->uv_loop) {
    uv_loop_delete(client->uv_loop);
    client->uv_loop = NULL;
  }
  free(client);
}
示例#2
0
文件: client.c 项目: 559210/libpomelo
void pc_client_destroy(pc_client_t *client) {
  pc_client_state state;

  uv_mutex_lock(&client->state_mutex);
  state = client->state;
  uv_mutex_unlock(&client->state_mutex);

  if(PC_ST_INITED == client->state) {
    goto finally;
  }

  if(PC_ST_CLOSED == client->state) {
    goto finally;
  }

  pc_client_disconnect(client);
  pc_client_join(client);

finally:
  pc__client_clear(client);

  if(client->uv_loop) {
    uv_loop_delete(client->uv_loop);
    client->uv_loop = NULL;
  }
  pc_jsonp_free(client);
}