mirror of
				https://github.com/tokio-rs/tokio.git
				synced 2025-11-03 14:02:47 +00:00 
			
		
		
		
	runtime: move task out of the lifo_slot in block_in_place (#6596)
				
					
				
			This commit is contained in:
		
							parent
							
								
									97bb47b480
								
							
						
					
					
						commit
						873cb8ae2f
					
				@ -395,11 +395,19 @@ where
 | 
				
			|||||||
        let cx = maybe_cx.expect("no .is_some() == false cases above should lead here");
 | 
					        let cx = maybe_cx.expect("no .is_some() == false cases above should lead here");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Get the worker core. If none is set, then blocking is fine!
 | 
					        // Get the worker core. If none is set, then blocking is fine!
 | 
				
			||||||
        let core = match cx.core.borrow_mut().take() {
 | 
					        let mut core = match cx.core.borrow_mut().take() {
 | 
				
			||||||
            Some(core) => core,
 | 
					            Some(core) => core,
 | 
				
			||||||
            None => return Ok(()),
 | 
					            None => return Ok(()),
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // If we heavily call `spawn_blocking`, there might be no available thread to
 | 
				
			||||||
 | 
					        // run this core. Except for the task in the lifo_slot, all tasks can be
 | 
				
			||||||
 | 
					        // stolen, so we move the task out of the lifo_slot to the run_queue.
 | 
				
			||||||
 | 
					        if let Some(task) = core.lifo_slot.take() {
 | 
				
			||||||
 | 
					            core.run_queue
 | 
				
			||||||
 | 
					                .push_back_or_overflow(task, &*cx.worker.handle, &mut core.stats);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // We are taking the core from the context and sending it to another
 | 
					        // We are taking the core from the context and sending it to another
 | 
				
			||||||
        // thread.
 | 
					        // thread.
 | 
				
			||||||
        take_core = true;
 | 
					        take_core = true;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user