Skip to content

Commit

Permalink
stdio: Document no support for writing to non-blocking stdio/stderr
Browse files Browse the repository at this point in the history
Printing to stdio/stderr that have been opened with non-blocking
(O_NONBLOCK in linux) can result in an error, which is not handled
by std::io module causing a panic.

Signed-off-by: Usama Arif <usama.arif@bytedance.com>
  • Loading branch information
uarif1 committed Sep 7, 2022
1 parent e7c7aa7 commit dfbc1f7
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
3 changes: 3 additions & 0 deletions library/std/src/io/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -992,6 +992,9 @@ pub fn set_output_capture(sink: Option<LocalStream>) -> Option<LocalStream> {
/// the global stream.
///
/// However, if the actual I/O causes an error, this function does panic.
///
/// Writing to non-blocking stdout/stderr can cause an error, which will lead
/// this function to panic.
fn print_to<T>(args: fmt::Arguments<'_>, global_s: fn() -> T, label: &str)
where
T: Write,
Expand Down
12 changes: 12 additions & 0 deletions library/std/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ macro_rules! panic {
///
/// Panics if writing to `io::stdout()` fails.
///
/// Writing to non-blocking stdout can cause an error, which will lead
/// this macro to panic.
///
/// # Examples
///
/// ```
Expand Down Expand Up @@ -107,6 +110,9 @@ macro_rules! print {
///
/// Panics if writing to [`io::stdout`] fails.
///
/// Writing to non-blocking stdout can cause an error, which will lead
/// this macro to panic.
///
/// [`io::stdout`]: crate::io::stdout
///
/// # Examples
Expand Down Expand Up @@ -147,6 +153,9 @@ macro_rules! println {
///
/// Panics if writing to `io::stderr` fails.
///
/// Writing to non-blocking stdout can cause an error, which will lead
/// this macro to panic.
///
/// # Examples
///
/// ```
Expand Down Expand Up @@ -179,6 +188,9 @@ macro_rules! eprint {
///
/// Panics if writing to `io::stderr` fails.
///
/// Writing to non-blocking stdout can cause an error, which will lead
/// this macro to panic.
///
/// # Examples
///
/// ```
Expand Down

0 comments on commit dfbc1f7

Please sign in to comment.