write to TaskStorage::future via inline(never) fn to encourage RVO
This commit is contained in:
		
							parent
							
								
									5e381d49da
								
							
						
					
					
						commit
						3a1ed823f8
					
				@ -203,7 +203,7 @@ impl<F: Future + 'static> AvailableTask<F> {
 | 
				
			|||||||
    fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> {
 | 
					    fn initialize_impl<S>(self, future: impl FnOnce() -> F) -> SpawnToken<S> {
 | 
				
			||||||
        unsafe {
 | 
					        unsafe {
 | 
				
			||||||
            self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll));
 | 
					            self.task.raw.poll_fn.set(Some(TaskStorage::<F>::poll));
 | 
				
			||||||
            self.task.future.write(future());
 | 
					            self.task.future.write_in_place(future);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let task = TaskRef::new(self.task);
 | 
					            let task = TaskRef::new(self.task);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,8 +17,9 @@ impl<T> UninitCell<T> {
 | 
				
			|||||||
        &mut *self.as_mut_ptr()
 | 
					        &mut *self.as_mut_ptr()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub unsafe fn write(&self, val: T) {
 | 
					    #[inline(never)]
 | 
				
			||||||
        ptr::write(self.as_mut_ptr(), val)
 | 
					    pub unsafe fn write_in_place(&self, func: impl FnOnce() -> T) {
 | 
				
			||||||
 | 
					        ptr::write(self.as_mut_ptr(), func())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub unsafe fn drop_in_place(&self) {
 | 
					    pub unsafe fn drop_in_place(&self) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user