X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=driver%2Fstderr.c;h=7def5d929dc16b7690e9edf3e1ec2fd358c47545;hp=68e752132e15c201d691e2180002cbe71bdc3b55;hb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;hpb=ec8d2b32b63649e6d32bdfb306eda062769af823 diff --git a/driver/stderr.c b/driver/stderr.c index 68e75213..7def5d92 100644 --- a/driver/stderr.c +++ b/driver/stderr.c @@ -1,5 +1,5 @@ /* stderr.c --- capturing stdout/stderr output onto the screensaver window. - * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2012 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -464,6 +464,7 @@ initialize_stderr (saver_info *si) perror ("could not dup() a new stdout:"); return; } + close (out); } stderr_stdout_read_fd = in; @@ -540,9 +541,20 @@ shutdown_stderr (saver_info *si) if (real_stderr) fflush (real_stderr); if (stdout != real_stdout) - dup2 (fileno(real_stdout), fileno(stdout)); + { + dup2 (fileno(real_stdout), fileno(stdout)); + fclose (real_stdout); + real_stdout = stdout; + } if (stderr != real_stderr) - dup2 (fileno(real_stderr), fileno(stderr)); - - stderr_stdout_read_fd = -1; + { + dup2 (fileno(real_stderr), fileno(stderr)); + fclose (real_stderr); + real_stderr = stderr; + } + if (stderr_stdout_read_fd != -1) + { + close (stderr_stdout_read_fd); + stderr_stdout_read_fd = -1; + } }