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