1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-15 23:35:34 +00:00

Merge pull request #296 from smemsh/masterpid-forkonstart

fix suspend in session master when fork_on_start
This commit is contained in:
rkd77 2024-04-11 08:01:17 +02:00 committed by GitHub
commit 605f2d8ddb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 18 additions and 11 deletions

View File

@ -518,13 +518,15 @@ int
init_interlink(void)
{
int fd = connect_to_af_unix();
int pid;
if (fd != -1 || remote_session_flags) return fd;
parse_options_again();
if (get_opt_bool("ui.sessions.fork_on_start", NULL)) {
pid_t pid;
pid = fork();
if (pid == -1) return -1;
@ -535,11 +537,18 @@ init_interlink(void)
for (i = 1; i <= (MAX_BIND_TRIES+2); ++i) {
fd = connect_to_af_unix();
if (fd != -1) return fd;
if (fd != -1) {
master_pid = pid;
return fd;
}
elinks_usleep(BIND_TRIES_DELAY * i);
}
return -1;
}
/* child */
#ifdef HAVE_GETPID
master_pid = getpid();
#endif
close_terminal_pipes();
}
bind_to_af_unix();

View File

@ -60,6 +60,8 @@
struct program program;
pid_t master_pid = 0;
static int ac;
static char **av;
static int init_b = 0;
@ -193,6 +195,9 @@ init(void)
|| get_cmd_opt_bool("source")
|| (fd = init_interlink()) == -1) {
#ifdef HAVE_GETPID
master_pid = getpid();
#endif
parse_options_again();
init_b = 1;
init_modules(builtin_modules);

View File

@ -23,6 +23,7 @@ struct program {
};
extern struct program program;
extern pid_t master_pid;
void shrink_memory(int);
void parse_options_again(void);

View File

@ -77,7 +77,7 @@ sig_tstp(struct terminal *term)
block_itrm();
#if defined (SIGCONT) && defined(SIGTTOU)
if (master_pid) {
if (pid == master_pid) {
pid_t newpid = fork();
if (!newpid) {
int r;

View File

@ -54,8 +54,6 @@ INIT_LIST_OF(struct terminal, terminals);
struct hash *temporary_files;
static void check_if_no_terminal(void);
pid_t master_pid = 0;
void
clean_temporary_files(void)
{
@ -191,12 +189,6 @@ init_term(int fdin, int fdout)
term->fdout = fdout;
term->master = (term->fdout == get_output_handle());
#ifdef HAVE_GETPID
if (term->master) {
master_pid = getpid();
}
#endif
term->blocked = -1;
get_terminal_name(name + 9);