Discard waiter from fut_awaited_by with single-object optimization
(&self, waiter: &PyObject, vm: &VirtualMachine)
| 746 | |
| 747 | /// Discard waiter from fut_awaited_by with single-object optimization |
| 748 | fn awaited_by_discard(&self, waiter: &PyObject, vm: &VirtualMachine) -> PyResult<()> { |
| 749 | let mut awaited_by = self.fut_awaited_by.write(); |
| 750 | if awaited_by.is_none() { |
| 751 | return Ok(()); |
| 752 | } |
| 753 | |
| 754 | let obj = awaited_by.as_ref().unwrap(); |
| 755 | if !self.fut_awaited_by_is_set.load(Ordering::Relaxed) { |
| 756 | // Single object - check if it matches |
| 757 | if obj.is(waiter) { |
| 758 | *awaited_by = None; |
| 759 | } |
| 760 | } else { |
| 761 | // It's a Set - use discard |
| 762 | vm.call_method(obj, "discard", (waiter.to_owned(),))?; |
| 763 | } |
| 764 | Ok(()) |
| 765 | } |
| 766 | |
| 767 | #[pymethod] |
| 768 | fn __await__(zelf: PyRef<Self>, _vm: &VirtualMachine) -> PyResult<PyFutureIter> { |
no test coverage detected