diff options
author | David Garcia Quintas <dgq@google.com> | 2015-05-31 12:39:40 -0700 |
---|---|---|
committer | David Garcia Quintas <dgq@google.com> | 2015-05-31 12:48:52 -0700 |
commit | 8b8cce05d782e7db52b5574fa9249029ffc767eb (patch) | |
tree | c893c7a135b37dff30c063b584c239a5ee625d09 /src/core/security/credentials.c | |
parent | 284488b4347685a83f97b6123a8d7115bb8ee032 (diff) |
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).
Diffstat (limited to 'src/core/security/credentials.c')
-rw-r--r-- | src/core/security/credentials.c | 29 |
1 files changed, 25 insertions, 4 deletions
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); |