(
zelf: PyRef<Self>,
args: AddDoneCallbackArgs,
vm: &VirtualMachine,
)
| 331 | |
| 332 | #[pymethod] |
| 333 | fn add_done_callback( |
| 334 | zelf: PyRef<Self>, |
| 335 | args: AddDoneCallbackArgs, |
| 336 | vm: &VirtualMachine, |
| 337 | ) -> PyResult<()> { |
| 338 | if zelf.fut_loop.read().is_none() { |
| 339 | return Err(vm.new_runtime_error("Future object is not initialized.")); |
| 340 | } |
| 341 | let ctx = match args.context.flatten() { |
| 342 | Some(c) => c, |
| 343 | None => get_copy_context(vm)?, |
| 344 | }; |
| 345 | |
| 346 | if zelf.fut_state.load() != FutureState::Pending { |
| 347 | Self::call_soon_with_context(&zelf, args.func, Some(ctx), vm)?; |
| 348 | } else if zelf.fut_callback0.read().is_none() { |
| 349 | *zelf.fut_callback0.write() = Some(args.func); |
| 350 | *zelf.fut_context0.write() = Some(ctx); |
| 351 | } else { |
| 352 | let tuple = vm.ctx.new_tuple(vec![args.func, ctx]); |
| 353 | let mut callbacks = zelf.fut_callbacks.write(); |
| 354 | if callbacks.is_none() { |
| 355 | *callbacks = Some(vm.ctx.new_list(vec![tuple.into()]).into()); |
| 356 | } else { |
| 357 | let list = callbacks.as_ref().unwrap(); |
| 358 | vm.call_method(list, "append", (tuple,))?; |
| 359 | } |
| 360 | } |
| 361 | Ok(()) |
| 362 | } |
| 363 | |
| 364 | #[pymethod] |
| 365 | fn remove_done_callback(&self, func: PyObjectRef, vm: &VirtualMachine) -> PyResult<usize> { |
nothing calls this directly
no test coverage detected