diff options
author | Doug Evans <dje@google.com> | 2010-04-20 05:52:07 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2010-04-20 05:52:07 +0000 |
commit | ff9f22f1a739cacfec1ab2be3a51ddeccb9fd9c4 (patch) | |
tree | c81335d0e6fe04936e6fc6eda96d235906554add /gdb/ser-pipe.c | |
parent | * gdb.base/help.exp (help source): Update expected output. (diff) | |
download | binutils-gdb-ff9f22f1a739cacfec1ab2be3a51ddeccb9fd9c4.tar.gz binutils-gdb-ff9f22f1a739cacfec1ab2be3a51ddeccb9fd9c4.tar.bz2 binutils-gdb-ff9f22f1a739cacfec1ab2be3a51ddeccb9fd9c4.zip |
* ser-base.c (generic_readchar): Watch for EOF in read of error_fd.
* ser-pipe.c (pipe_open): Fix file descriptor leaks.
(pipe_close): Ditto.
Diffstat (limited to 'gdb/ser-pipe.c')
-rw-r--r-- | gdb/ser-pipe.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c index e0454d4c17c..77c3a08e9a9 100644 --- a/gdb/ser-pipe.c +++ b/gdb/ser-pipe.c @@ -66,7 +66,11 @@ pipe_open (struct serial *scb, const char *name) if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0) return -1; if (socketpair (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0) - return -1; + { + close (pdes[0]); + close (pdes[1]); + return -1; + } /* Create the child process to run the command in. Note that the apparent call to vfork() below *might* actually be a call to @@ -123,6 +127,8 @@ pipe_open (struct serial *scb, const char *name) /* Parent. */ close (pdes[1]); + if (err_pdes[1] != -1) + close (err_pdes[1]); /* :end chunk */ state = XMALLOC (struct pipe_state); state->pid = pid; @@ -145,10 +151,15 @@ pipe_close (struct serial *scb) int pid = state->pid; close (scb->fd); scb->fd = -1; + if (scb->error_fd != -1) + close (scb->error_fd); + scb->error_fd = -1; xfree (state); scb->state = NULL; kill (pid, SIGTERM); - /* Might be useful to check that the child does die. */ + /* Might be useful to check that the child does die, + and while we're waiting for it to die print any remaining + stderr output. */ } } |