+2010-04-19 Doug Evans <dje@google.com>
+
+ * 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.
+
2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
* configure.tgt (x86_64-*-mingw*): Set BUILD_GDBSERVER to yes.
break;
s = read (scb->error_fd, &buf, to_read);
- if (s == -1)
+ if (s <= 0)
break;
/* In theory, embedded newlines are not a problem.
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
/* Parent. */
close (pdes[1]);
+ if (err_pdes[1] != -1)
+ close (err_pdes[1]);
/* :end chunk */
state = XMALLOC (struct pipe_state);
state->pid = pid;
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. */
}
}