Fix memory leaks

reviewable/pr8239/r2
Craig Tiller 8 years ago
parent d1253a3ae4
commit 287928c69c
  1. 1
      src/core/lib/iomgr/tcp_client_posix.c
  2. 14
      src/core/lib/iomgr/tcp_posix.c

@ -250,6 +250,7 @@ finish:
if (done) {
gpr_mu_destroy(&ac->mu);
gpr_free(ac->addr_str);
grpc_channel_args_destroy(ac->channel_args);
gpr_free(ac);
}
grpc_exec_ctx_sched(exec_ctx, closure, error, NULL);

@ -114,12 +114,18 @@ static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
grpc_fd_shutdown(exec_ctx, tcp->em_fd);
}
static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
static void tcp_end_free(grpc_exec_ctx *exec_ctx, void *tcp,
grpc_error *error) {
gpr_free(tcp);
}
static void tcp_begin_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
"tcp_unref_orphan");
gpr_slice_buffer_destroy(&tcp->last_read_buffer);
gpr_free(tcp->peer_string);
gpr_free(tcp);
grpc_buffer_user_destroy(exec_ctx, &tcp->buffer_user,
grpc_closure_create(tcp_end_free, tcp));
}
/*#define GRPC_TCP_REFCOUNT_DEBUG*/
@ -132,7 +138,7 @@ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
reason, tcp->refcount.count, tcp->refcount.count - 1);
if (gpr_unref(&tcp->refcount)) {
tcp_free(exec_ctx, tcp);
tcp_begin_free(exec_ctx, tcp);
}
}
@ -147,7 +153,7 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
#define TCP_REF(tcp, reason) tcp_ref((tcp))
static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
if (gpr_unref(&tcp->refcount)) {
tcp_free(exec_ctx, tcp);
tcp_begin_free(exec_ctx, tcp);
}
}

Loading…
Cancel
Save