mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Merge pull request #296 from smemsh/masterpid-forkonstart
fix suspend in session master when fork_on_start
This commit is contained in:
commit
605f2d8ddb
@ -518,13 +518,15 @@ int
|
|||||||
init_interlink(void)
|
init_interlink(void)
|
||||||
{
|
{
|
||||||
int fd = connect_to_af_unix();
|
int fd = connect_to_af_unix();
|
||||||
int pid;
|
|
||||||
|
|
||||||
if (fd != -1 || remote_session_flags) return fd;
|
if (fd != -1 || remote_session_flags) return fd;
|
||||||
|
|
||||||
parse_options_again();
|
parse_options_again();
|
||||||
|
|
||||||
if (get_opt_bool("ui.sessions.fork_on_start", NULL)) {
|
if (get_opt_bool("ui.sessions.fork_on_start", NULL)) {
|
||||||
|
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
pid = fork();
|
pid = fork();
|
||||||
|
|
||||||
if (pid == -1) return -1;
|
if (pid == -1) return -1;
|
||||||
@ -535,11 +537,18 @@ init_interlink(void)
|
|||||||
for (i = 1; i <= (MAX_BIND_TRIES+2); ++i) {
|
for (i = 1; i <= (MAX_BIND_TRIES+2); ++i) {
|
||||||
fd = connect_to_af_unix();
|
fd = connect_to_af_unix();
|
||||||
|
|
||||||
if (fd != -1) return fd;
|
if (fd != -1) {
|
||||||
|
master_pid = pid;
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
elinks_usleep(BIND_TRIES_DELAY * i);
|
elinks_usleep(BIND_TRIES_DELAY * i);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
/* child */
|
||||||
|
#ifdef HAVE_GETPID
|
||||||
|
master_pid = getpid();
|
||||||
|
#endif
|
||||||
close_terminal_pipes();
|
close_terminal_pipes();
|
||||||
}
|
}
|
||||||
bind_to_af_unix();
|
bind_to_af_unix();
|
||||||
|
@ -60,6 +60,8 @@
|
|||||||
|
|
||||||
struct program program;
|
struct program program;
|
||||||
|
|
||||||
|
pid_t master_pid = 0;
|
||||||
|
|
||||||
static int ac;
|
static int ac;
|
||||||
static char **av;
|
static char **av;
|
||||||
static int init_b = 0;
|
static int init_b = 0;
|
||||||
@ -193,6 +195,9 @@ init(void)
|
|||||||
|| get_cmd_opt_bool("source")
|
|| get_cmd_opt_bool("source")
|
||||||
|| (fd = init_interlink()) == -1) {
|
|| (fd = init_interlink()) == -1) {
|
||||||
|
|
||||||
|
#ifdef HAVE_GETPID
|
||||||
|
master_pid = getpid();
|
||||||
|
#endif
|
||||||
parse_options_again();
|
parse_options_again();
|
||||||
init_b = 1;
|
init_b = 1;
|
||||||
init_modules(builtin_modules);
|
init_modules(builtin_modules);
|
||||||
|
@ -23,6 +23,7 @@ struct program {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern struct program program;
|
extern struct program program;
|
||||||
|
extern pid_t master_pid;
|
||||||
|
|
||||||
void shrink_memory(int);
|
void shrink_memory(int);
|
||||||
void parse_options_again(void);
|
void parse_options_again(void);
|
||||||
|
@ -77,7 +77,7 @@ sig_tstp(struct terminal *term)
|
|||||||
|
|
||||||
block_itrm();
|
block_itrm();
|
||||||
#if defined (SIGCONT) && defined(SIGTTOU)
|
#if defined (SIGCONT) && defined(SIGTTOU)
|
||||||
if (master_pid) {
|
if (pid == master_pid) {
|
||||||
pid_t newpid = fork();
|
pid_t newpid = fork();
|
||||||
if (!newpid) {
|
if (!newpid) {
|
||||||
int r;
|
int r;
|
||||||
|
@ -54,8 +54,6 @@ INIT_LIST_OF(struct terminal, terminals);
|
|||||||
struct hash *temporary_files;
|
struct hash *temporary_files;
|
||||||
static void check_if_no_terminal(void);
|
static void check_if_no_terminal(void);
|
||||||
|
|
||||||
pid_t master_pid = 0;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
clean_temporary_files(void)
|
clean_temporary_files(void)
|
||||||
{
|
{
|
||||||
@ -191,12 +189,6 @@ init_term(int fdin, int fdout)
|
|||||||
term->fdout = fdout;
|
term->fdout = fdout;
|
||||||
term->master = (term->fdout == get_output_handle());
|
term->master = (term->fdout == get_output_handle());
|
||||||
|
|
||||||
#ifdef HAVE_GETPID
|
|
||||||
if (term->master) {
|
|
||||||
master_pid = getpid();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
term->blocked = -1;
|
term->blocked = -1;
|
||||||
|
|
||||||
get_terminal_name(name + 9);
|
get_terminal_name(name + 9);
|
||||||
|
Loading…
Reference in New Issue
Block a user