Skip to content
Snippets Groups Projects
Commit 748fe3ff authored by Craig Tiller's avatar Craig Tiller
Browse files

Potential fix for stuck RPCs at shutdown

parent 7a890268
No related branches found
No related tags found
No related merge requests found
......@@ -309,6 +309,7 @@ static void push_setting(transport *t, grpc_chttp2_setting_id id,
static int prepare_callbacks(transport *t);
static void run_callbacks(transport *t, const grpc_transport_callbacks *cb);
static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb);
static int prepare_write(transport *t);
static void perform_write(transport *t, grpc_endpoint *ep);
......@@ -516,13 +517,13 @@ static void init_transport(transport *t, grpc_transport_setup_callback setup,
static void destroy_transport(grpc_transport *gt) {
transport *t = (transport *)gt;
gpr_mu_lock(&t->mu);
lock(t);
t->destroying = 1;
while (t->calling_back) {
gpr_cv_wait(&t->cv, &t->mu, gpr_inf_future);
}
t->cb = NULL;
gpr_mu_unlock(&t->mu);
drop_connection(t);
unlock(t);
unref_transport(t);
}
......@@ -772,7 +773,7 @@ static void unlock(transport *t) {
}
if (call_closed) {
cb->closed(t->cb_user_data, &t->base);
call_cb_closed(t, cb);
}
/* write some bytes if necessary */
......@@ -1765,6 +1766,10 @@ static void run_callbacks(transport *t, const grpc_transport_callbacks *cb) {
}
}
static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb) {
cb->closed(t->cb_user_data, &t->base);
}
static void add_to_pollset(grpc_transport *gt, grpc_pollset *pollset) {
transport *t = (transport *)gt;
lock(t);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment