| 
					
				 | 
			
			
				@@ -144,6 +144,12 @@ struct grpc_resource_quota { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* Closure around rq_reclamation_done */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_closure rq_reclamation_done_closure; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* This is only really usable for debugging: it's always a stale pointer, but 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     a stale pointer that might just be fresh enough to guide us to where the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     reclamation system is stuck */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_closure *debug_only_last_initiated_reclaimer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_resource_user *debug_only_last_reclaimer_resource_user; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* Roots of all resource user lists */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resource_user *roots[GRPC_RULIST_COUNT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -340,6 +346,9 @@ static bool rq_reclaim(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   resource_quota->reclaiming = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resource_quota_internal_ref(resource_quota); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_closure *c = resource_user->reclaimers[destructive]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  resource_quota->debug_only_last_reclaimer_resource_user = resource_user; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  resource_quota->debug_only_last_initiated_reclaimer = c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   resource_user->reclaimers[destructive] = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_closure_run(exec_ctx, c, GRPC_ERROR_NONE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -476,6 +485,8 @@ static void ru_shutdown(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       GRPC_ERROR_CANCELLED, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   resource_user->reclaimers[0] = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   resource_user->reclaimers[1] = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rulist_remove(resource_user, GRPC_RULIST_RECLAIMER_BENIGN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rulist_remove(resource_user, GRPC_RULIST_RECLAIMER_DESTRUCTIVE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void ru_destroy(grpc_exec_ctx *exec_ctx, void *ru, grpc_error *error) { 
			 |