diff --git a/src/core/lib/iomgr/combiner.c b/src/core/lib/iomgr/combiner.c
index 25b2ec3d4c5eff38a95451d5c8ccf543c6194f77..eb5ad634bd5097cd48ecf87ea9cb1014f5c57710 100644
--- a/src/core/lib/iomgr/combiner.c
+++ b/src/core/lib/iomgr/combiner.c
@@ -155,12 +155,11 @@ static bool start_execute_final(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
       gpr_log(GPR_DEBUG,
               "C:%p start_execute_final take_async_break_before_final_list=%d",
               lock, lock->take_async_break_before_final_list));
-  if (lock->optional_workqueue != NULL &&
-      lock->take_async_break_before_final_list) {
+  if (lock->take_async_break_before_final_list) {
     grpc_closure_init(&lock->continue_finishing, continue_executing_final,
                       lock);
-    grpc_workqueue_enqueue(exec_ctx, lock->optional_workqueue,
-                           &lock->continue_finishing, GRPC_ERROR_NONE);
+    grpc_exec_ctx_sched(exec_ctx, &lock->continue_finishing, GRPC_ERROR_NONE,
+                        GRPC_WORKQUEUE_REF(lock->optional_workqueue, "sched"));
     GPR_TIMER_END("combiner.start_execute_final", 0);
     return false;
   } else {
@@ -201,9 +200,9 @@ static void finish(grpc_exec_ctx *exec_ctx, grpc_combiner *lock) {
   do {
     executor = maybe_finish_one;
     gpr_atm old_state = gpr_atm_full_fetch_add(&lock->state, -2);
-    GRPC_COMBINER_TRACE(gpr_log(
-        GPR_DEBUG, "C:%p finish[%d] old_state=%" PRIdPTR " cl=[%p,%p]", lock,
-        loops, old_state, lock->final_list.head, lock->final_list.tail));
+    GRPC_COMBINER_TRACE(gpr_log(GPR_DEBUG,
+                                "C:%p finish[%d] old_state=%" PRIdPTR, lock,
+                                loops, old_state));
     switch (old_state) {
       case 5:  // we're down to one queued item: if it's the final list we
       case 4:  // should do that