MCPcopy Index your code
hub / github.com/RustPython/RustPython / awaited_by_add

Method awaited_by_add

crates/stdlib/src/_asyncio.rs:723–745  ·  view source on GitHub ↗

Add waiter to fut_awaited_by with single-object optimization

(&self, waiter: PyObjectRef, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

721
722 /// Add waiter to fut_awaited_by with single-object optimization
723 fn awaited_by_add(&self, waiter: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
724 let mut awaited_by = self.fut_awaited_by.write();
725 if awaited_by.is_none() {
726 // First waiter - store directly
727 *awaited_by = Some(waiter);
728 return Ok(());
729 }
730
731 if self.fut_awaited_by_is_set.load(Ordering::Relaxed) {
732 // Already a Set - add to it
733 let set = awaited_by.as_ref().unwrap();
734 vm.call_method(set, "add", (waiter,))?;
735 } else {
736 // Single object - convert to Set
737 let existing = awaited_by.take().unwrap();
738 let new_set = PySet::default().into_ref(&vm.ctx);
739 new_set.add(existing, vm)?;
740 new_set.add(waiter, vm)?;
741 *awaited_by = Some(new_set.into());
742 self.fut_awaited_by_is_set.store(true, Ordering::Relaxed);
743 }
744 Ok(())
745 }
746
747 /// Discard waiter from fut_awaited_by with single-object optimization
748 fn awaited_by_discard(&self, waiter: &PyObject, vm: &VirtualMachine) -> PyResult<()> {

Callers 1

future_add_to_awaited_byFunction · 0.80

Calls 11

SomeClass · 0.50
writeMethod · 0.45
is_noneMethod · 0.45
loadMethod · 0.45
unwrapMethod · 0.45
as_refMethod · 0.45
call_methodMethod · 0.45
takeMethod · 0.45
into_refMethod · 0.45
addMethod · 0.45
storeMethod · 0.45

Tested by

no test coverage detected