mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Release unused capacity after short reads (#9028)
Assisted-by: Codex:gpt-6
This commit is contained in:
1 parent
129330f95c
commit
85d5956dbb
4 files changed
+10
-2
No files matched your search
@@ -1931,6 +1931,7 @@ mod _socket {
|
||||
.recv_with_flags(buffer.spare_capacity_mut(), flags)
|
||||
})?;
|
||||
unsafe { buffer.set_len(n) };
|
||||
buffer.shrink_to_fit();
|
||||
Ok(buffer)
|
||||
}
|
||||
|
||||
@@ -1984,6 +1985,7 @@ mod _socket {
|
||||
.recv_from_with_flags(buffer.spare_capacity_mut(), flags)
|
||||
})?;
|
||||
unsafe { buffer.set_len(n) };
|
||||
buffer.shrink_to_fit();
|
||||
Ok((
|
||||
buffer,
|
||||
get_addr_tuple(&addr, zelf.proto.load(Ordering::Relaxed), vm),
|
||||
@@ -2239,7 +2241,7 @@ mod _socket {
|
||||
let ancbufsize = ancbufsize as usize;
|
||||
let flags = flags.unwrap_or(0);
|
||||
|
||||
let msg = zelf
|
||||
let mut msg = zelf
|
||||
.sock_op(vm, SockWaitKind::Read, || {
|
||||
let sock = zelf.sock_snapshot()?;
|
||||
let fd = unsafe { std::os::fd::BorrowedFd::borrow_raw(sock_fileno(&sock)) };
|
||||
@@ -2247,6 +2249,8 @@ mod _socket {
|
||||
})
|
||||
.map_err(|e| e.into_pyexception(vm))?;
|
||||
|
||||
msg.data.shrink_to_fit();
|
||||
|
||||
// Build ancdata list
|
||||
let ancdata = Self::parse_ancillary_data(&msg.ancdata, vm);
|
||||
|
||||
|
||||
@@ -3198,7 +3198,7 @@ mod _ssl {
|
||||
}
|
||||
|
||||
// Helper function to handle return value based on buffer presence
|
||||
let return_data = |data: Vec<u8>,
|
||||
let return_data = |mut data: Vec<u8>,
|
||||
buffer_arg: &OptionalArg<ArgMemoryBuffer>,
|
||||
vm: &VirtualMachine|
|
||||
-> PyResult<PyObjectRef> {
|
||||
@@ -3216,6 +3216,7 @@ mod _ssl {
|
||||
}
|
||||
OptionalArg::Missing => {
|
||||
// Return bytes object
|
||||
data.shrink_to_fit();
|
||||
Ok(vm.ctx.new_bytes(data).into())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1439,6 +1439,7 @@ mod _io {
|
||||
match ($x, written > 0) {
|
||||
(Some(0), _) | (None, true) => {
|
||||
out.truncate(written);
|
||||
out.shrink_to_fit();
|
||||
return Ok(Some(out));
|
||||
}
|
||||
(Some(r), _) => r,
|
||||
@@ -6250,6 +6251,7 @@ mod fileio {
|
||||
}
|
||||
};
|
||||
bytes.truncate(n);
|
||||
bytes.shrink_to_fit();
|
||||
bytes
|
||||
} else {
|
||||
let mut bytes = vec![];
|
||||
|
||||
@@ -403,6 +403,7 @@ pub(super) mod _os {
|
||||
match vm.allow_threads(|| crt_fd::read(fd, &mut buffer)) {
|
||||
Ok(n) => {
|
||||
buffer.truncate(n);
|
||||
buffer.shrink_to_fit();
|
||||
return Ok(vm.ctx.new_bytes(buffer));
|
||||
}
|
||||
Err(e) if e.raw_os_error() == Some(libc::EINTR) => {
|
||||
|
||||
Reference in new issue
Block a user