Add comments and "pid_last_seen", "fd_last_seen" structure members for proposed new logic that will hold fd info on-screen a short time after closure, to retain the progress display when a watched process exits (#81).

This commit is contained in:
Andrew Wood
2025-10-17 19:09:46 +01:00
parent 61021eab6b
commit 0aac6d6aac
2 changed files with 29 additions and 0 deletions
+8
View File
@@ -520,10 +520,18 @@ struct pvwatchfd_s {
off_t size; /* size of whole file, 0 if unknown */
off_t position; /* position last seen at */
struct timespec start_time; /* time we started watching the fd */
struct timespec fd_last_seen; /* time the fd was last seen open */
pid_t watch_pid; /* PID to watch */
int watch_fd; /* fd to watch */
bool displayable; /* false if not displayable */
bool unused; /* true if free for re-use */
/*
* After the "watch_fd" is found to be closed, "fd_last_seen" stops
* being updated; when "fd_last_seen" is old enough, "unused"
* becomes true so the slot can be re-used. This allows fd
* information to be held on-screen for a short while after the fd
* is closed (#81).
*/
};
typedef struct pvwatchfd_s *pvwatchfd_t;
+21
View File
@@ -712,6 +712,7 @@ int pv_watchfd_loop(pvstate_t state)
int fd; /* watched fd, or -1 for all */
pvwatchfd_t info_array; /* watch information for each fd */
int array_length; /* length of watch info array */
struct timespec pid_last_seen; /* when this PID was last seen */
bool finished; /* "PID:FD": fd closed; or PID gone */
} *watching;
unsigned int watch_idx;
@@ -719,6 +720,26 @@ int pv_watchfd_loop(pvstate_t state)
struct timespec next_update, next_remotecheck, cur_time;
int prev_displayed_lines, blank_lines;
/*
* TODO: new logic:
* For each watching[] item, "pid_last_seen" stops being updated
* when the PID ceases to exist. If "fd" is >=0 then
* "pid_last_seen" is set to the newest of the "fd_last_seen" values
* of the info_array[] fd info items. When "pid_last_seen" is too
* old, "finished" becomes true so this watching[] item stops being
* displayed.
*
* In each watching[].info_array[] fd info item, once its "watch_fd"
* is closed, its "fd_last_seen" stops being updated, and once
* that's stopped updating long enough, its "unused" becomes true.
*
* All of this allows information to be held on-screen for a short
* while after the fd closes or the PID exits (#81).
*/
/* TODO: implement the above (pid_last_seen, fd_last_seen) */
/* TODO: check whether pid_last_seen is needed, or only fd_last_seen */
/* If there's nothing to watch, do nothing at all. */
if (state->watchfd.count < 1)
return 0;