summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2013-02-22 08:45:07 +0000
committerJosé Fonseca <[email protected]>2013-02-22 08:45:07 +0000
commit8ed1279b1068fe3581f70ad151d0a5881a947d26 (patch)
treeaf3f1d46721175901dcc2c3a5d6ace505147e816
parent59025d6e951467a8f5a6ebf909128b0e080f484d (diff)
trace: Never close stdout/stderr.
This could happen, when a trace screen was destroyed and then recreated.
-rw-r--r--src/gallium/drivers/trace/tr_dump.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gallium/drivers/trace/tr_dump.c b/src/gallium/drivers/trace/tr_dump.c
index 48c8914f7bb..826ce5bc1ba 100644
--- a/src/gallium/drivers/trace/tr_dump.c
+++ b/src/gallium/drivers/trace/tr_dump.c
@@ -57,6 +57,7 @@
#include "tr_texture.h"
+static boolean close_stream = FALSE;
static FILE *stream = NULL;
static unsigned refcount = 0;
pipe_static_mutex(call_mutex);
@@ -228,8 +229,11 @@ trace_dump_trace_close(void)
{
if(stream) {
trace_dump_writes("</trace>\n");
- fclose(stream);
- stream = NULL;
+ if (close_stream) {
+ fclose(stream);
+ close_stream = FALSE;
+ stream = NULL;
+ }
refcount = 0;
call_no = 0;
}
@@ -261,12 +265,15 @@ trace_dump_trace_begin(void)
if(!stream) {
if (strcmp(filename, "stderr") == 0) {
+ close_stream = FALSE;
stream = stderr;
}
else if (strcmp(filename, "stdout") == 0) {
+ close_stream = FALSE;
stream = stdout;
}
else {
+ close_stream = TRUE;
stream = fopen(filename, "wt");
if (!stream)
return FALSE;