From 8b8cce05d782e7db52b5574fa9249029ffc767eb Mon Sep 17 00:00:00 2001 From: David Garcia Quintas <dgq@google.com> Date: Sun, 31 May 2015 12:39:40 -0700 Subject: [PATCH] Removed managed closures from iomgr. The only remaining need for those (whereby the closure frees itself upon completion) remains in security/credentials.c, where the code has been inlined (to be removed at a later time). --- src/core/iomgr/iomgr.c | 29 ----------------------------- src/core/security/credentials.c | 29 +++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/core/iomgr/iomgr.c b/src/core/iomgr/iomgr.c index 1d6fa9053e..85867b6edf 100644 --- a/src/core/iomgr/iomgr.c +++ b/src/core/iomgr/iomgr.c @@ -33,7 +33,6 @@ #include "src/core/iomgr/iomgr.h" -#include <assert.h> #include <stdlib.h> #include "src/core/iomgr/iomgr_internal.h" @@ -64,7 +63,6 @@ static void background_callback_executor(void *ignored) { g_cbs_head = closure->next; if (!g_cbs_head) g_cbs_tail = NULL; gpr_mu_unlock(&g_mu); - assert(closure->success >= 0); closure->cb(closure->cb_arg, closure->success); gpr_mu_lock(&g_mu); } else if (grpc_alarm_check(&g_mu, gpr_now(), &deadline)) { @@ -169,32 +167,6 @@ void grpc_iomgr_closure_init(grpc_iomgr_closure *closure, grpc_iomgr_cb_func cb, closure->next = NULL; } -typedef struct { - grpc_iomgr_closure managed; - grpc_iomgr_closure *manager; -} managed_closure_arg; - -static void closure_manager_func(void *arg, int success) { - managed_closure_arg *mc_arg = (managed_closure_arg*) arg; - - mc_arg->managed.cb(mc_arg->managed.cb_arg, success); - gpr_free(mc_arg->manager); - gpr_free(mc_arg); -} - -void grpc_iomgr_managed_closure_init(grpc_iomgr_closure *manager, - grpc_iomgr_cb_func managed_cb, - void *managed_cb_arg) { - managed_closure_arg *managed_arg = gpr_malloc(sizeof(managed_closure_arg)); - - managed_arg->managed.cb = managed_cb; - managed_arg->managed.cb_arg = managed_cb_arg; - managed_arg->manager= manager; - - grpc_iomgr_closure_init(manager, closure_manager_func, managed_arg); -} - - void grpc_iomgr_add_delayed_callback(grpc_iomgr_closure *closure, int success) { closure->success = success; gpr_mu_lock(&g_mu); @@ -237,7 +209,6 @@ int grpc_maybe_call_delayed_callbacks(gpr_mu *drop_mu, int success) { retake_mu = drop_mu; drop_mu = NULL; } - assert(closure->success >= 0); closure->cb(closure->cb_arg, success && closure->success); n++; } diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c index a960e77db6..648ac60eb6 100644 --- a/src/core/security/credentials.c +++ b/src/core/security/credentials.c @@ -824,6 +824,20 @@ void on_simulated_token_fetch_done(void *user_data, int success) { grpc_credentials_metadata_request_destroy(r); } +/* TODO(dgq): get rid of the concept of "managed closure" altogether */ +typedef struct { + grpc_iomgr_closure managed; + grpc_iomgr_closure *manager; +} managed_closure_arg; + +static void closure_manager_func(void *arg, int success) { + managed_closure_arg *mc_arg = (managed_closure_arg*) arg; + + mc_arg->managed.cb(mc_arg->managed.cb_arg, success); + gpr_free(mc_arg->manager); + gpr_free(mc_arg); +} + static void fake_oauth2_get_request_metadata(grpc_credentials *creds, const char *service_url, grpc_credentials_metadata_cb cb, @@ -831,12 +845,19 @@ static void fake_oauth2_get_request_metadata(grpc_credentials *creds, grpc_fake_oauth2_credentials *c = (grpc_fake_oauth2_credentials *)creds; if (c->is_async) { + /* TODO(dgq): get rid of the managed closure */ grpc_iomgr_closure *on_simulated_token_fetch_done_closure = gpr_malloc(sizeof(grpc_iomgr_closure)); - /* TODO(dgq): get rid of the managed_closure altogether */ - grpc_iomgr_managed_closure_init( - on_simulated_token_fetch_done_closure, on_simulated_token_fetch_done, - grpc_credentials_metadata_request_create(creds, cb, user_data)); + managed_closure_arg *managed_arg = gpr_malloc(sizeof(managed_closure_arg)); + + managed_arg->manager = on_simulated_token_fetch_done_closure; + managed_arg->managed.cb = on_simulated_token_fetch_done; + managed_arg->managed.cb_arg = + grpc_credentials_metadata_request_create(creds, cb, user_data); + + grpc_iomgr_closure_init(on_simulated_token_fetch_done_closure, + closure_manager_func, managed_arg); + grpc_iomgr_add_callback(on_simulated_token_fetch_done_closure); } else { cb(user_data, c->access_token_md->entries, 1, GRPC_CREDENTIALS_OK); -- GitLab