| 
					
				 | 
			
			
				@@ -28,6 +28,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/channel/handshaker.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/debug/trace.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/iomgr/timer.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/lib/slice/slice_internal.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_core::TraceFlag grpc_handshaker_trace(false, "handshaker"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -220,8 +221,26 @@ static bool call_next_handshaker_locked(grpc_handshake_manager* mgr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // callback.  Otherwise, call the next handshaker. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (error != GRPC_ERROR_NONE || mgr->shutdown || mgr->args.exit_early || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       mgr->index == mgr->count) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (error == GRPC_ERROR_NONE && mgr->shutdown) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("handshaker shutdown"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // TODO(roth): It is currently necessary to shutdown endpoints 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // before destroying then, even when we know that there are no 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // pending read/write callbacks.  This should be fixed, at which 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // point this can be removed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_endpoint_shutdown(mgr->args.endpoint, GRPC_ERROR_REF(error)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_endpoint_destroy(mgr->args.endpoint); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      mgr->args.endpoint = nullptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_channel_args_destroy(mgr->args.args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      mgr->args.args = nullptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_slice_buffer_destroy_internal(mgr->args.read_buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      gpr_free(mgr->args.read_buffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      mgr->args.read_buffer = nullptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (grpc_handshaker_trace.enabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      gpr_log(GPR_INFO, "handshake_manager %p: handshaking complete", mgr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      gpr_log(GPR_INFO, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              "handshake_manager %p: handshaking complete -- scheduling " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              "on_handshake_done with error=%s", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              mgr, grpc_error_string(error)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Cancel deadline timer, since we're invoking the on_handshake_done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // callback now. 
			 |