Exemplo n.º 1
0
static void freelist_fd(grpc_fd *fd) {
  gpr_mu_lock(&fd_freelist_mu);
  fd->freelist_next = fd_freelist;
  fd_freelist = fd;
  grpc_iomgr_unregister_object(&fd->iomgr_object);
  gpr_mu_unlock(&fd_freelist_mu);
}
Exemplo n.º 2
0
/* Abandons a socket. Either we're going to queue it up for garbage collecting
   from the IO Completion Port thread, or destroy it immediately. Note that this
   mechanisms assumes that we're either always waiting for an operation, or we
   explicitly know that we don't. If there is a future case where we can have
   an "idle" socket which is neither trying to read or write, we'd start leaking
   both memory and sockets. */
void grpc_winsocket_orphan(grpc_winsocket *winsocket) {
  grpc_iomgr_unregister_object(&winsocket->iomgr_object);
  if (winsocket->read_info.outstanding || winsocket->write_info.outstanding) {
    grpc_iocp_socket_orphan(winsocket);
  } else {
    grpc_winsocket_destroy(winsocket);
  }
}
Exemplo n.º 3
0
static void unref_by(grpc_fd *fd, int n) {
  gpr_atm old = gpr_atm_full_fetch_add(&fd->refst, -n);
  if (old == n) {
    grpc_iomgr_add_callback(&fd->on_done_closure);
    freelist_fd(fd);
    grpc_iomgr_unregister_object(&fd->iomgr_object);
  } else {
    GPR_ASSERT(old > n);
  }
}
Exemplo n.º 4
0
static void freelist_fd(grpc_fd *fd) {
  // Note that this function must be called after a release store (or
  // full-barrier operation) on refst so that prior actions on the fd are
  // ordered before the fd becomes visible to the freelist
  gpr_mu_lock(&fd_freelist_mu);
  fd->freelist_next = fd_freelist;
  fd_freelist = fd;
  grpc_iomgr_unregister_object(&fd->iomgr_object);
  gpr_mu_unlock(&fd_freelist_mu);
}
/* Thread function to asynch-ify grpc_blocking_resolve_address */
static void do_request(void *rp) {
  request *r = rp;
  grpc_resolved_addresses *resolved =
      grpc_blocking_resolve_address(r->name, r->default_port);
  void *arg = r->arg;
  grpc_resolve_cb cb = r->cb;
  gpr_free(r->name);
  gpr_free(r->default_port);
  cb(arg, resolved);
  grpc_iomgr_unregister_object(&r->iomgr_object);
  gpr_free(r);
}
Exemplo n.º 6
0
/* Thread function to asynch-ify grpc_blocking_resolve_address */
static void do_request(void *rp) {
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
  request *r = rp;
  grpc_resolved_addresses *resolved =
      grpc_blocking_resolve_address(r->name, r->default_port);
  void *arg = r->arg;
  grpc_resolve_cb cb = r->cb;
  gpr_free(r->name);
  gpr_free(r->default_port);
  grpc_iomgr_unregister_object(&r->iomgr_object);
  gpr_free(r);
  cb(&exec_ctx, arg, resolved);
  grpc_exec_ctx_finish(&exec_ctx);
}
Exemplo n.º 7
0
Arquivo: httpcli.c Projeto: sihai/grpc
static void finish(internal_request *req, int success) {
  grpc_pollset_set_del_pollset(&req->context->pollset_set, req->pollset);
  req->on_response(req->user_data, success ? &req->parser.r : NULL);
  grpc_httpcli_parser_destroy(&req->parser);
  if (req->addresses != NULL) {
    grpc_resolved_addresses_destroy(req->addresses);
  }
  if (req->ep != NULL) {
    grpc_endpoint_destroy(req->ep);
  }
  gpr_slice_unref(req->request_text);
  gpr_free(req->host);
  grpc_iomgr_unregister_object(&req->iomgr_obj);
  gpr_free(req);
}
Exemplo n.º 8
0
static void fd_destroy(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
  grpc_fd *fd = arg;
  /* Add the fd to the freelist */
  grpc_iomgr_unregister_object(&fd->iomgr_object);
  pollable_destroy(&fd->pollable);
  gpr_mu_destroy(&fd->orphaned_mu);
  gpr_mu_lock(&fd_freelist_mu);
  fd->freelist_next = fd_freelist;
  fd_freelist = fd;

  grpc_lfev_destroy(&fd->read_closure);
  grpc_lfev_destroy(&fd->write_closure);

  gpr_mu_unlock(&fd_freelist_mu);
}
Exemplo n.º 9
0
static void unref_by(grpc_fd *fd, int n, const char *reason, const char *file,
                     int line) {
  gpr_atm old;
  gpr_log(GPR_DEBUG, "FD %d %p unref %d %d -> %d [%s; %s:%d]", fd->fd, fd, n,
          gpr_atm_no_barrier_load(&fd->refst),
          gpr_atm_no_barrier_load(&fd->refst) - n, reason, file, line);
#else
static void unref_by(grpc_fd *fd, int n) {
  gpr_atm old;
#endif
  old = gpr_atm_full_fetch_add(&fd->refst, -n);
  if (old == n) {
    grpc_iomgr_unregister_object(&fd->iomgr_object);
    freelist_fd(fd);
  } else {
    GPR_ASSERT(old > n);
  }
}
Exemplo n.º 10
0
static void destroy(grpc_winsocket *winsocket) {
  grpc_iomgr_unregister_object(&winsocket->iomgr_object);
  gpr_mu_destroy(&winsocket->state_mu);
  gpr_free(winsocket);
}