From cabe03eb758a898e5c0e6906890fd7ede0cc2be1 Mon Sep 17 00:00:00 2001
From: antirez <antirez@gmail.com>
Date: Wed, 6 Jul 2011 15:22:00 +0200
Subject: [PATCH] more valgrind friendly test

---
 src/valgrind.sup         | 12 ++++++++++++
 tests/support/server.tcl |  8 +++++---
 tests/test_helper.tcl    |  9 ++++++++-
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/valgrind.sup b/src/valgrind.sup
index 7ba757548..3024d63bc 100644
--- a/src/valgrind.sup
+++ b/src/valgrind.sup
@@ -3,3 +3,15 @@
    Memcheck:Cond
    fun:lzf_compress
 }
+
+{
+   <lzf_unitialized_hash_table>
+   Memcheck:Value4
+   fun:lzf_compress
+}
+
+{
+   <lzf_unitialized_hash_table>
+   Memcheck:Value8
+   fun:lzf_compress
+}
diff --git a/tests/support/server.tcl b/tests/support/server.tcl
index c92754611..5c5af37d9 100644
--- a/tests/support/server.tcl
+++ b/tests/support/server.tcl
@@ -1,5 +1,6 @@
 set ::global_overrides {}
 set ::tags {}
+set ::valgrind_errors {}
 
 proc error_and_quit {config_file error} {
     puts "!!COULD NOT START REDIS-SERVER\n"
@@ -16,11 +17,12 @@ proc check_valgrind_errors stderr {
     close $fd
 
     if {![regexp -- {ERROR SUMMARY: 0 errors} $buf] ||
-        ![regexp -- {definitely lost: 0 bytes} $buf]} {
+        (![regexp -- {definitely lost: 0 bytes} $buf] &&
+         ![regexp -- {no leaks are possible} $buf])} {
         puts "*** VALGRIND ERRORS ***"
         puts $buf
-        puts "--- press enter to continue ---"
-        gets stdin
+        puts "-----------------------"
+        append ::valgrind_errors "$buf\n\n"
     }
 }
 
diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl
index cf55eba08..f034299f2 100644
--- a/tests/test_helper.tcl
+++ b/tests/test_helper.tcl
@@ -138,6 +138,7 @@ proc execute_everything {} {
 
 proc main {} {
     cleanup
+    set exit_with_error 0
 
     if {[string length $::file] > 0} {
         foreach {file} [split $::file ,] {
@@ -169,8 +170,14 @@ proc main {} {
         }
 
         puts ""
-        exit 1
+        incr exit_with_error
     }
+
+    if {[string length $::valgrind_errors]} {
+        puts "Valgrind errors:\n$::valgrind_errors"
+        incr exit_with_error
+    }
+    if {$exit_with_error} {exit 1}
 }
 
 # parse arguments