Fix fd leakage.
Prevent atexit from being called twice on dtach -A.
This commit is contained in:
parent
203193838d
commit
3653366fd8
4
README
4
README
|
|
@ -96,6 +96,10 @@ to dtach when attaching.
|
||||||
|
|
||||||
5. CHANGES
|
5. CHANGES
|
||||||
|
|
||||||
|
The changes since version 0.4 are:
|
||||||
|
- Fix fd leakage.
|
||||||
|
- Prevent atexit from being called twice on dtach -A.
|
||||||
|
|
||||||
The changes in version 0.4 are:
|
The changes in version 0.4 are:
|
||||||
- Slightly improved README and dtach.1
|
- Slightly improved README and dtach.1
|
||||||
- Portability updates thanks to sourceforge's compile farm. dtach should now
|
- Portability updates thanks to sourceforge's compile farm. dtach should now
|
||||||
|
|
|
||||||
25
attach.c
25
attach.c
|
|
@ -63,7 +63,10 @@ connect_socket(char *name)
|
||||||
sockun.sun_family = AF_UNIX;
|
sockun.sun_family = AF_UNIX;
|
||||||
strcpy(sockun.sun_path, name);
|
strcpy(sockun.sun_path, name);
|
||||||
if (connect(s, (struct sockaddr*)&sockun, sizeof(sockun)) < 0)
|
if (connect(s, (struct sockaddr*)&sockun, sizeof(sockun)) < 0)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,6 +138,17 @@ attach_main(int noerror)
|
||||||
struct packet pkt;
|
struct packet pkt;
|
||||||
unsigned char buf[BUFSIZE];
|
unsigned char buf[BUFSIZE];
|
||||||
|
|
||||||
|
/* Attempt to open the socket. Don't display an error if noerror is
|
||||||
|
** set. */
|
||||||
|
s = connect_socket(sockname);
|
||||||
|
if (s < 0)
|
||||||
|
{
|
||||||
|
if (!noerror)
|
||||||
|
printf("%s: %s: %s\n", progname, sockname,
|
||||||
|
strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* The current terminal settings are equal to the original terminal
|
/* The current terminal settings are equal to the original terminal
|
||||||
** settings at this point. */
|
** settings at this point. */
|
||||||
cur_term = orig_term;
|
cur_term = orig_term;
|
||||||
|
|
@ -151,17 +165,6 @@ attach_main(int noerror)
|
||||||
signal(SIGQUIT, die);
|
signal(SIGQUIT, die);
|
||||||
signal(SIGWINCH, win_change);
|
signal(SIGWINCH, win_change);
|
||||||
|
|
||||||
/* Attempt to open the socket. Don't display an error if noerror is
|
|
||||||
** set. */
|
|
||||||
s = connect_socket(sockname);
|
|
||||||
if (s < 0)
|
|
||||||
{
|
|
||||||
if (!noerror)
|
|
||||||
printf("%s: %s: %s\n", progname, sockname,
|
|
||||||
strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set raw mode, almost. We allow flow control to work, for instance. */
|
/* Set raw mode, almost. We allow flow control to work, for instance. */
|
||||||
cur_term.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
|
cur_term.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
|
||||||
cur_term.c_oflag &= ~(OPOST);
|
cur_term.c_oflag &= ~(OPOST);
|
||||||
|
|
|
||||||
10
master.c
10
master.c
|
|
@ -125,12 +125,21 @@ create_socket(char *name)
|
||||||
sockun.sun_family = AF_UNIX;
|
sockun.sun_family = AF_UNIX;
|
||||||
strcpy(sockun.sun_path, name);
|
strcpy(sockun.sun_path, name);
|
||||||
if (bind(s, (struct sockaddr*)&sockun, sizeof(sockun)) < 0)
|
if (bind(s, (struct sockaddr*)&sockun, sizeof(sockun)) < 0)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
if (listen(s, 128) < 0)
|
if (listen(s, 128) < 0)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
/* chmod it to prevent any suprises */
|
/* chmod it to prevent any suprises */
|
||||||
if (chmod(name, 0600) < 0)
|
if (chmod(name, 0600) < 0)
|
||||||
|
{
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -353,6 +362,7 @@ master_main(char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Parent - just return. */
|
/* Parent - just return. */
|
||||||
|
close(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue