pager: Fix deadlock when using built-in pager
The parent is waiting for an EOF on the pipe transmitting the pager name before starting to send data. With external pagers this happens due to execlp() CLOEXEC'ing the pipe, so the internal pager needs to close it manually.
This commit is contained in:
parent
38ab1ec9c8
commit
d8f8b18cdb
|
@ -194,11 +194,13 @@ int pager_open(PagerFlags flags) {
|
|||
"Failed to execute '%s', using next fallback pager: %m", exe);
|
||||
}
|
||||
|
||||
r = loop_write(exe_name_pipe[1], "(built-in)", strlen("(built-in") + 1, false);
|
||||
r = loop_write(exe_name_pipe[1], "(built-in)", strlen("(built-in)") + 1, false);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to write pager name to socket: %m");
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
/* Close pipe to signal the parent to start sending data */
|
||||
safe_close_pair(exe_name_pipe);
|
||||
pager_fallback();
|
||||
/* not reached */
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue