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
Andrew Wood
0c28d017de
Note the signal interrupt message feature ( #187 ).
2026-04-29 19:54:27 +01:00
Andrew Wood
0a69501594
Add the new signal interrupt message ( #187 ).
2026-04-29 19:53:43 +01:00
Andrew Wood
a3f0caeab4
Record the received number before setting the exit trigger, so it will definitely be available for reporting ( #187 ).
2026-04-28 22:55:16 +01:00
Andrew Wood
478039f539
Report which signal triggered the exit ( #187 ).
2026-04-28 22:53:23 +01:00
Andrew Wood
2a25221eaf
Suppress the error message about a signal interrupt in cursor mode in all but the first instance in a pipeline ( #187 ).
2026-04-27 21:27:20 +01:00
Andrew Wood
c763f1fcaa
Write an error message if interrupted by a signal such as SIGINT ( #187 ).
2026-04-26 21:45:36 +01:00
Andrew Wood
8b4fa8ade7
Clear the terminal flag ECHOCTL before starting, and set it again at the end, similar to how TOSTOP is dealt with ( #187 ).
2026-04-26 20:01:22 +01:00
Andrew Wood
57f0b91d16
Adjust the watchfd changes for Apple builds.
2026-04-25 23:05:17 +01:00
Andrew Wood
a66a1cc10c
Message line number updates.
2026-04-25 22:06:18 +01:00
Andrew Wood
2a31b73a32
Replace the fixed-sized buffers file_fdinfo and file_fdsymlink with dynamically allocated equivalents.
2026-04-25 22:04:38 +01:00
Andrew Wood
ee96f3f43b
Specify which watched PID had the problem.
2026-04-25 21:04:41 +01:00
Andrew Wood
2b1d359281
Use pv_asprintf() to allocate fd_dir instead of having it statically sized.
2026-04-25 21:03:09 +01:00
Andrew Wood
4854d71aa9
Adjustment from "make indent".
2026-04-25 21:01:56 +01:00
Andrew Wood
18b1926d61
Replace the fixed-size "cwd" buffer with a dynamically allocated one.
2026-04-24 23:00:45 +01:00
Andrew Wood
43a54bd541
Rename the pvwatchfd "file_fd" item to "file_fdsymlink" to to better distinguish it from the other structure members.
2026-04-23 21:42:10 +01:00
Andrew Wood
bf371e9a8c
Tidy up comments.
2026-04-22 22:21:36 +01:00
Andrew Wood
239a20d13f
Tidy up comments.
2026-04-21 23:45:56 +01:00
Andrew Wood
a220e993af
Adjust the wording as pv does not "know" things.
2026-04-21 22:18:13 +01:00
Andrew Wood
a955038360
Document the behaviour exhibited when pv writes to a pipe and the reader exits with unread data in the pipe buffer.
2026-04-21 22:13:44 +01:00
Andrew Wood
c0e530eefd
Use awk instead of the non-portable "~" sed command.
2026-04-20 22:55:24 +01:00
Andrew Wood
1d28da18ce
Add a basic test for monitoring, each of the "in" and "out" sides.
2026-04-19 23:12:10 +01:00
Andrew Wood
571c3bee06
Datestamp update.
2026-04-19 21:51:24 +01:00
Andrew Wood
618f1c1578
Message line number updates.
2026-04-19 21:49:12 +01:00
Andrew Wood
496b1e431e
Return a boolean from pv__transfer_read/write, where false indicates a transient error.
2026-04-19 21:47:46 +01:00
Andrew Wood
ef9240a7a5
Add another _ to the internal read/write_repeated functions so they are easier to distinguish from pv__transfer_read/write when searching.
2026-04-19 21:15:33 +01:00
Andrew Wood
b2f44b6724
Clamp the calculated ETA to within the size of a long integer to avoid over/underflows, and round off the floating point value rather than just truncating the decimal portion.
2026-04-19 17:57:32 +01:00
Andrew Wood
c19d16b3c8
Loosen the limits on this test slightly.
2026-04-19 17:47:52 +01:00
Andrew Wood
0440ba26da
Adjust the ETA clamp note to mention 64-bit.
2026-04-19 16:58:55 +01:00
Andrew Wood
070bcb5acc
Message line number updates.
2026-04-19 16:58:14 +01:00
Andrew Wood
f3353cb4bd
Adjust the ETA max to 68 years on systems where a long integer is 32 bits wide, as that is all that will fit.
2026-04-19 16:58:05 +01:00
Andrew Wood
9f63212a7c
Add pv_asprintf() and change the way the terminal lock file is stored, so it is in a dynamically allocated buffer rather than using one of a fixed size.
2026-04-19 16:24:26 +01:00
Andrew Wood
a59c91f03d
Note the time clamping changes.
2026-04-19 13:06:59 +01:00
Andrew Wood
f724ebe158
Message line number updates.
2026-04-19 13:04:30 +01:00
Andrew Wood
3bc102c334
Increase the ETA max cutoff to just under 1,000,000 days, not 100,000.
2026-04-19 13:04:05 +01:00
Andrew Wood
d638cd50f4
Remove pv_bound_long() and the blanket 100,000 hour cutoff - instead, clamp the ETA to just under 100,000 hours (to keep it from getting too wide), clamp the FINETA to a max of 7,000 years (to keep the date the same width), and make the timer show an overflow message when 1,000,000 days is reached.
2026-04-19 13:02:03 +01:00
Andrew Wood
ebbcdf4b4d
Remove obsolete TODO - there is no open issue for it, and it doesn't explain what "better" means.
2026-04-19 12:16:48 +01:00
Andrew Wood
b3410cf8c0
Adjust the lower boundary to make failure less likely on a heavily loaded system.
2026-04-19 00:19:29 +01:00
Andrew Wood
dc51002ba4
Reword the introduction, and mention monitor mode.
2026-04-19 00:09:26 +01:00
Andrew Wood
9bc5903337
Remove the empty translation catalogues for Spanish and Georgian, as they are unmaintained and have never received any submissions.
2026-04-18 22:34:32 +01:00
Andrew Wood
26c4ad45bd
Note the error reporting change.
2026-04-18 22:30:39 +01:00
Andrew Wood
cb8cac81aa
Message line number updates.
2026-04-18 22:24:09 +01:00
Andrew Wood
7dc02a475e
Make pv_error() and pv_perror() available outside of src/pv/, and use them throughout the program.
2026-04-18 22:23:28 +01:00
Andrew Wood
25f43e129f
Use pv_perror() rather than perror(), for consistency.
2026-04-18 21:46:16 +01:00
Andrew Wood
b12681d667
Add a pv_perror() function to remove all the repeated strerror(errno) calls from pv_error() arguments, and standardise the error lines so the filename in question always comes first.
2026-04-18 21:07:08 +01:00
Andrew Wood
0af9cb2314
Use pv_error() instead of writing directly to stderr.
2026-04-18 20:33:07 +01:00
Andrew Wood
fc364d381f
Dynamically allocate the error message prefix, instead of copying it into a static buffer.
2026-04-18 20:30:39 +01:00
Andrew Wood
0481e99c2f
Use pv_error() instead of writing directly to stderr.
2026-04-18 20:29:40 +01:00