trace: Only close trace files on exit.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 25 Apr 2013 13:18:33 +0000 (14:18 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 25 Apr 2013 13:18:33 +0000 (14:18 +0100)
Many applications don't exit cleanly, others may create and destroy a
screen multiple times, so we only write </trace> tag and close at exit
time.

src/gallium/drivers/trace/tr_dump.c
src/gallium/drivers/trace/tr_dump.h
src/gallium/drivers/trace/tr_screen.c

index 826ce5bc1ba46815be7082368271ba5a26b88480..7111e0d174dea5ef68bbdcf6b3ededf43c70104e 100644 (file)
@@ -59,7 +59,6 @@
 
 static boolean close_stream = FALSE;
 static FILE *stream = NULL;
-static unsigned refcount = 0;
 pipe_static_mutex(call_mutex);
 static long unsigned call_no = 0;
 static boolean dumping = FALSE;
@@ -234,7 +233,6 @@ trace_dump_trace_close(void)
          close_stream = FALSE;
          stream = NULL;
       }
-      refcount = 0;
       call_no = 0;
    }
 }
@@ -283,15 +281,13 @@ trace_dump_trace_begin(void)
       trace_dump_writes("<?xml-stylesheet type='text/xsl' href='trace.xsl'?>\n");
       trace_dump_writes("<trace version='0.1'>\n");
 
-#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_APPLE)
-      /* Linux applications rarely cleanup GL / Gallium resources so catch
-       * application exit here */
+      /* Many applications don't exit cleanly, others may create and destroy a
+       * screen multiple times, so we only write </trace> tag and close at exit
+       * time.
+       */
       atexit(trace_dump_trace_close);
-#endif
    }
 
-   ++refcount;
-
    return TRUE;
 }
 
@@ -300,13 +296,6 @@ boolean trace_dump_trace_enabled(void)
    return stream ? TRUE : FALSE;
 }
 
-void trace_dump_trace_end(void)
-{
-   if(stream)
-      if(!--refcount)
-         trace_dump_trace_close();
-}
-
 /*
  * Call lock
  */
index ef0129281c1de6e028e446dd1429bfd9f0d4e781..4737a93a6c3e7f9e82cc6dfd9d7d259efd6bac00 100644 (file)
@@ -50,7 +50,6 @@ struct pipe_box;
 boolean trace_dump_trace_begin(void);
 boolean trace_dump_trace_enabled(void);
 void trace_dump_trace_flush(void);
-void trace_dump_trace_end(void);
 
 /*
  * Lock and unlock the call mutex.
index df775072fa3febb443cfbaf8d5b4df5073ab6579..5281ba8b47bbdd48e891c4cdf419110f5757b85a 100644 (file)
@@ -427,7 +427,6 @@ trace_screen_destroy(struct pipe_screen *_screen)
    trace_dump_call_begin("pipe_screen", "destroy");
    trace_dump_arg(ptr, screen);
    trace_dump_call_end();
-   trace_dump_trace_end();
 
    screen->destroy(screen);
 
@@ -497,7 +496,6 @@ trace_screen_create(struct pipe_screen *screen)
 error2:
    trace_dump_ret(ptr, screen);
    trace_dump_call_end();
-   trace_dump_trace_end();
 error1:
    return screen;
 }