From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=43284 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OXBgH-0005R0-FG for qemu-devel@nongnu.org; Fri, 09 Jul 2010 07:23:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OXBgG-00044r-0w for qemu-devel@nongnu.org; Fri, 09 Jul 2010 07:23:45 -0400 Received: from mtagate2.uk.ibm.com ([194.196.100.162]:46322) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OXBgF-00043t-Q1 for qemu-devel@nongnu.org; Fri, 09 Jul 2010 07:23:43 -0400 Received: from d06nrmr1806.portsmouth.uk.ibm.com (d06nrmr1806.portsmouth.uk.ibm.com [9.149.39.193]) by mtagate2.uk.ibm.com (8.13.1/8.13.1) with ESMTP id o69BNd0E020685 for ; Fri, 9 Jul 2010 11:23:39 GMT Received: from d06av03.portsmouth.uk.ibm.com (d06av03.portsmouth.uk.ibm.com [9.149.37.213]) by d06nrmr1806.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o69BNcoi1232972 for ; Fri, 9 Jul 2010 12:23:39 +0100 Received: from d06av03.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av03.portsmouth.uk.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o69BNbbx017957 for ; Fri, 9 Jul 2010 12:23:38 +0100 From: Stefan Hajnoczi Date: Fri, 9 Jul 2010 12:23:33 +0100 Message-Id: <1278674613-9303-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v2] trace: Flush trace buffer on exit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Prerna Saxena Signed-off-by: Stefan Hajnoczi --- This patch is against the tracing branch: http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/tracing v2: * Reset trace_idx in flush_trace_buffer(). simpletrace.c | 27 ++++++++++++++++++--------- 1 files changed, 18 insertions(+), 9 deletions(-) diff --git a/simpletrace.c b/simpletrace.c index ace009f..4a4203e 100644 --- a/simpletrace.c +++ b/simpletrace.c @@ -22,6 +22,23 @@ static TraceRecord trace_buf[TRACE_BUF_LEN]; static unsigned int trace_idx; static FILE *trace_fp; +static void flush_trace_buffer(void) +{ + if (!trace_fp) { + trace_fp = fopen("/tmp/trace.log", "w"); + if (trace_fp) { + atexit(flush_trace_buffer); + } + } + if (trace_fp) { + size_t unused; /* for when fwrite(3) is declared warn_unused_result */ + unused = fwrite(trace_buf, trace_idx * sizeof(trace_buf[0]), 1, trace_fp); + } + + /* Discard written trace records */ + trace_idx = 0; +} + static void trace(TraceEventID event, unsigned long x1, unsigned long x2, unsigned long x3, unsigned long x4, unsigned long x5) @@ -44,15 +61,7 @@ static void trace(TraceEventID event, unsigned long x1, rec->x5 = x5; if (++trace_idx == TRACE_BUF_LEN) { - trace_idx = 0; - - if (!trace_fp) { - trace_fp = fopen("/tmp/trace.log", "w"); - } - if (trace_fp) { - size_t result = fwrite(trace_buf, sizeof trace_buf, 1, trace_fp); - result = result; - } + flush_trace_buffer(); } } -- 1.7.1