[PATCH] uml: clean up error path

This cleans an error path which used to leak file descriptors by returning
without trying to tidy up.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Jeff Dike 2005-06-08 15:48:27 -07:00 committed by Linus Torvalds
parent 501cb02b43
commit 1f96ddb4fb
1 changed files with 16 additions and 8 deletions

View File

@ -143,22 +143,22 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
{
struct winch_data data;
unsigned long stack;
int fds[2], pid, n, err;
int fds[2], n, err;
char c;
err = os_pipe(fds, 1, 1);
if(err < 0){
printk("winch_tramp : os_pipe failed, err = %d\n", -err);
return(err);
goto out;
}
data = ((struct winch_data) { .pty_fd = fd,
.pipe_fd = fds[1],
.close_me = fds[0] } );
pid = run_helper_thread(winch_thread, &data, 0, &stack, 0);
if(pid < 0){
err = run_helper_thread(winch_thread, &data, 0, &stack, 0);
if(err < 0){
printk("fork of winch_thread failed - errno = %d\n", errno);
return(pid);
goto out_close;
}
os_close_file(fds[1]);
@ -168,14 +168,22 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
printk("winch_tramp : failed to read synchronization byte\n");
printk("read failed, err = %d\n", -n);
printk("fd %d will not support SIGWINCH\n", fd);
pid = -1;
err = -EINVAL;
goto out_close1;
}
return(pid);
return err ;
out_close:
os_close_file(fds[1]);
out_close1:
os_close_file(fds[0]);
out:
return err;
}
void register_winch(int fd, struct tty_struct *tty)
{
int pid, thread, thread_fd;
int pid, thread, thread_fd = -1;
int count;
char c = 1;