Skip to content
Prev Previous commit
Next Next commit
Use new_payload_exception for BlockingIoError raise sites
  • Loading branch information
kangdora committed Aug 4, 2026
commit 3f9df3396c463b1572082fc89397d63a616d3073
27 changes: 14 additions & 13 deletions crates/vm/src/stdlib/_io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ cfg_select! {
}

use crate::{
AsObject, PyObject, PyObjectRef, PyResult, TryFromObject, VirtualMachine, builtins::PyModule,
AsObject, PyObject, PyObjectRef, PyResult, TryFromObject, VirtualMachine,
builtins::{PyModule, PyOSError},
};
pub use _io::{OpenArgs, io_open as open};
use rustpython_host_env::io as host_io;
Expand Down Expand Up @@ -943,14 +944,14 @@ mod _io {
Some(n) => n,
None => {
// BlockingIOError(errno, msg, characters_written=0)
return Err(vm.invoke_exception(
vm.ctx.exceptions.blocking_io_error,
return Err(vm.new_payload_exception::<PyOSError>(
vm.ctx.exceptions.blocking_io_error.to_owned(),
vec![
vm.new_pyobj(EAGAIN),
vm.new_pyobj("write could not complete without blocking"),
vm.new_pyobj(0),
],
)?);
].into(),
)?.upcast());
}
};
self.write_pos += n as Offset;
Expand Down Expand Up @@ -1154,14 +1155,14 @@ mod _io {
self.buffer[self.write_end as usize..][..avail].copy_from_slice(&buf[..avail]);
self.write_end += avail as Offset;
self.pos += avail as Offset;
return Err(vm.invoke_exception(
vm.ctx.exceptions.blocking_io_error,
return Err(vm.new_payload_exception::<PyOSError>(
vm.ctx.exceptions.blocking_io_error.to_owned(),
vec![
vm.new_pyobj(EAGAIN),
vm.new_pyobj("write could not complete without blocking"),
vm.new_pyobj(avail),
],
)?);
].into(),
)?.upcast());
}
Err(e) => return Err(e),
}
Expand Down Expand Up @@ -1200,14 +1201,14 @@ mod _io {
self.write_end = buffer_size;
// BlockingIOError(errno, msg, characters_written)
let chars_written = written + buffer_len;
return Err(vm.invoke_exception(
vm.ctx.exceptions.blocking_io_error,
return Err(vm.new_payload_exception::<PyOSError>(
vm.ctx.exceptions.blocking_io_error.to_owned(),
vec![
vm.new_pyobj(EAGAIN),
vm.new_pyobj("write could not complete without blocking"),
vm.new_pyobj(chars_written),
],
)?);
].into(),
)?.upcast());
}
None => break,
}
Expand Down