diff --git a/tokio/src/fs/file.rs b/tokio/src/fs/file.rs index d8b01ef12..0ac16b947 100644 --- a/tokio/src/fs/file.rs +++ b/tokio/src/fs/file.rs @@ -465,7 +465,9 @@ impl File { self.inner.lock().await.complete_inflight().await; let std = self.std.clone(); let std_file = asyncify(move || std.try_clone()).await?; - Ok(File::from_std(std_file)) + let mut file = File::from_std(std_file); + file.set_max_buf_size(self.max_buf_size); + Ok(file) } /// Destructures `File` into a [`std::fs::File`]. This function is diff --git a/tokio/tests/fs.rs b/tokio/tests/fs.rs index 9f739f60c..f5fb193f4 100644 --- a/tokio/tests/fs.rs +++ b/tokio/tests/fs.rs @@ -15,6 +15,22 @@ async fn path_read_write() { assert_eq!(out, b"bytes"); } +#[tokio::test] +async fn try_clone_should_preserve_max_buf_size() { + let buf_size = 128; + let temp = tempdir(); + let dir = temp.path(); + + let mut file = fs::File::create(dir.join("try_clone_should_preserve_max_buf_size")) + .await + .unwrap(); + file.set_max_buf_size(buf_size); + + let cloned = file.try_clone().await.unwrap(); + + assert_eq!(cloned.max_buf_size(), buf_size); +} + fn tempdir() -> tempfile::TempDir { tempfile::tempdir().unwrap() }