Commit Graph
1103 Commits
Author SHA1 Message Date
Andrew Wood e09976042d Reduce the scope of the first keyword_index (cppcheck recommendation), and in the formatter, guard against a size_t underflow by checking the write position each time it's used (implied by cppcheck). 2026-05-10 19:25:07 +01:00
Andrew Wood 7ddbc72525 Make the struct tm a const (cppcheck recommendation). 2026-05-10 19:19:30 +01:00
Andrew Wood 7c19f58e75 Mark pointers to constant buffers as const (cppcheck recommendation). 2026-05-10 19:18:01 +01:00
Andrew Wood 723d96b54b Mark argument as pointer to const, since only the pointer changes (cppcheck recommendation). 2026-05-10 19:17:12 +01:00
Andrew Wood 6b5d217e22 Reduce the scope of end_idx (cppcheck recommendation). 2026-05-10 19:15:54 +01:00
Andrew Wood d9eb83e1f5 Make the struct tm a const (cppcheck recommendation). 2026-05-10 19:15:17 +01:00
Andrew Wood 411f9529a2 Message line number updates. 2026-05-09 20:25:04 +01:00
Andrew Wood adf2767763 Additional commentary on total_written and rate limiting. 2026-05-09 20:24:49 +01:00
Andrew Wood 4fc5d10671 Remove spurious extra word. 2026-05-09 20:08:25 +01:00
Andrew Wood 19d1835d37 Message line number updates. 2026-05-09 20:04:09 +01:00
Andrew Wood 6f9e73f058 Add more detailed comments about the rate limiter. 2026-05-09 20:04:02 +01:00
Andrew Wood 5897576ca1 Message line number updates. 2026-05-09 17:23:50 +01:00
Andrew Wood 9b28da72eb Acknowledge the contribution. 2026-05-09 17:22:32 +01:00
Andrew Wood d49234eefe Update the notes about numbers passed to --rate-limit. 2026-05-09 17:18:42 +01:00
Andrew Wood 4bfe83a445 Note the --rate-limit change allowing decimal values. 2026-05-09 17:16:22 +01:00
Andrew Wood 228ff740bf Merge branch 'fractional_rate_limit' (#193). 2026-05-09 16:15:14 +01:00
Andrew Wood c69343856a Correct the broken pull links from before the repository move (/pull/ should be /pulls/ on Codeberg). 2026-05-09 16:12:38 +01:00
Andrew Wood d381a1c714 Correct the rate limit burst cap so it won't prevent output when the rate is below 0.2, and handle the case where more than one rate limit interval has passed since the last calculation (#193). 2026-05-09 00:37:29 +01:00
Andrew Wood 0a98062586 Define RATE_BURST_WINDOW as a floating point value since it's used in floating point calculations (#193). 2026-05-09 00:35:19 +01:00
Andrew Wood e7087b101d Allow "-L 0" to be propagated with "-R" so that a remote process can have its rate limiting turned off as well as on; and update the manual to note this (#193). 2026-05-08 21:07:29 +01:00
Andrew Wood eae06cf3c0 Correct the remote setting of the rate limit so that -R without -L does not turn off the current rate limiting of the remote process (#193). 2026-05-07 23:00:33 +01:00
Andrew Wood 0e7a77b42a Allow the rate limit to be specified as a fractional number (#193). 2026-05-06 23:24:51 +01:00
Andrew Wood a78a432f50 Message line number updates. 2026-05-05 21:05:27 +01:00
Andrew Wood 4867b641a7 Adjust the item ordering. 2026-05-05 21:03:55 +01:00
Andrew Wood 355d030ce0 Datestamp update. 2026-05-05 20:55:17 +01:00
Andrew Wood 547efed258 Set the exit status to 8 when /dev/null is not usable and --discard is active (#192). 2026-05-04 16:30:34 +01:00
Andrew Wood a4b90879a0 Add the messages for the pipe buffer size option and /dev/null detection. 2026-05-03 20:57:00 +01:00
Andrew Wood 3b1bad2334 Acknowledgements update. 2026-05-03 20:56:33 +01:00
Andrew Wood cfe7b4e97a Whitespace correction in comment. 2026-05-03 19:42:33 +01:00
Andrew Wood 10895792d2 When opening /dev/null internally, check that it really is a null device, and refuse to use it if not (#192). 2026-05-03 19:37:27 +01:00
Andrew Wood 6b19d8e31c Note the changes relating to the intermediate input pipe and the discard splice. 2026-05-03 18:30:57 +01:00
Andrew Wood f3ce23e7c7 Adjust the text relating to splice() in relation to the intermediate pipe development. 2026-05-03 18:26:55 +01:00
Andrew Wood 663a54bda0 Merge the changes for #188 and #191 which add an intermediate pipe on the input side to allow splice() to be used for all transfers. 2026-05-03 17:59:13 +01:00
Andrew Wood ae60fc0688 Move output_fd into HAVE_SPLICE. 2026-05-03 17:06:47 +01:00
Andrew Wood 11d727a88d In discard mode, if splice() is available, open a file descriptor to /dev/null and splice the input to that, to improve performance (#191). 2026-05-03 14:53:45 +01:00
Andrew Wood b75ecd79d5 Add comments explaining the steps (#188). 2026-05-03 13:42:27 +01:00
Andrew Wood 5fb7e49848 Start the intermediary pipe buffer size at 1MiB (#188). 2026-05-03 13:41:52 +01:00
Andrew Wood 21c8237a73 When splice() is available but neither the input nor the output are pipes, splice the input through an intermediary pipe (#188). 2026-05-03 01:12:33 +01:00
Andrew Wood b300046eb1 Acknowledgements update. 2026-05-02 17:12:21 +01:00
Andrew Wood 17cbab3045 Add an option "-J" / "--pipe-buffer-size" to set the size of the output pipe buffer when the output is a pipe, and when that option is not specified, automatically increase the output pipe buffer size to match that of the input, when the first input is also a pipe (#188). 2026-05-02 16:42:35 +01:00
Andrew Wood d421024fb8 Run through "make indent" for consistency, update message line numbers. 2026-05-01 19:47:10 +01:00
Andrew Wood 7a6ce0f0b6 Message line number updates. 2026-05-01 19:10:30 +01:00
Andrew Wood b1bf99c09b Datestamp update. 2026-05-01 19:10:04 +01:00
Andrew Wood 096b655bb8 Remove the note about getting stuck when writing to an exited reader, as it was fixed in #189. 2026-05-01 19:09:20 +01:00
Andrew Wood 7a276040ad Note the fix for the endless wait on EOF issue (#189). 2026-05-01 19:07:44 +01:00
Andrew Wood 89d2a7840f Acknowledge the contributor of the fix for endlessly waiting for an exited receiver to empty the pipe buffer (#189, #190). 2026-05-01 19:07:07 +01:00
Andrew Wood fb2b325e94 Merge pull request 'fix: avoid EOF hang on unread pipe output (#189)' (#190) from whoschek/pv:wip/eof_hang into main
Reviewed-on: https://codeberg.org/ivarch/pv/pulls/190
Reviewed-by: Andrew Wood <a-j-wood@noreply.codeberg.org>
2026-05-01 19:42:43 +02:00
Wolfgang Hoschek e7d188ac65 fix: avoid EOF hang on unread pipe output (#189)
At EOF, pv waits for bytes already written to an output pipe to be consumed before finishing. If the downstream reader exits without reading those bytes, the pipe can keep reporting unread data forever. Since pv has no more input, there is no later write that would fail with EPIPE and break the wait.

Detect this EOF drain-wait case with a non-blocking poll() on the output pipe. When the pipe reports that its readers are gone, mark the pipe closed and stop waiting for bytes that can no longer be consumed. While a reader is still present, keep the existing behaviour and continue waiting for the pipe buffer to drain.

Add regression coverage for both ways pv can reach this state: direct input that leaves unread output bytes behind, and a pipeline where the original producer fails but an intermediate filter such as gzip still emits a valid empty stream. The latter matters because pv can still have pending output at EOF even when the command at the start of the pipeline failed immediately.

Signed-off-by: Wolfgang Hoschek <wolfgang.hoschek@mac.com>
2026-04-30 04:47:09 -04:00
Andrew Wood 79a6420fea Replace the fixed-sized buffer file_fdpath with a dynamically allocated equivalent. 2026-04-29 21:43:46 +01:00
Andrew Wood c54c3258a6 Acknowledge the reporter (#187). 2026-04-29 20:10:02 +01:00