]> git.saurik.com Git - redis.git/commitdiff
A define to make Redis more helgrind friendly
authorantirez <antirez@gmail.com>
Fri, 15 Jan 2010 10:16:12 +0000 (05:16 -0500)
committerantirez <antirez@gmail.com>
Fri, 15 Jan 2010 10:16:12 +0000 (05:16 -0500)
redis.c

diff --git a/redis.c b/redis.c
index edb2a1228fc963b2ad17efc99b03586a3113c7af..7c87178d69a0d466727cd95f0bddcf713ac1bd79 100644 (file)
--- a/redis.c
+++ b/redis.c
 #include "lzf.h"    /* LZF compression library */
 #include "pqsort.h" /* Partial qsort for SORT+LIMIT */
 
+/* #define REDIS_HELGRIND_FRIENDLY */
+#if defined(__GNUC__) && defined(REDIS_HELGRIND_FRIENDLY)
+#warning "Remember to undef REDIS_HELGRIND_FRIENDLY before to commit"
+#endif
+
 /* Error codes */
 #define REDIS_OK                0
 #define REDIS_ERR               -1
@@ -7664,6 +7669,15 @@ static void *IOThreadEntryPoint(void *arg) {
         /* Get a new job to process */
         lockThreadedIO();
         if (listLength(server.io_newjobs) == 0) {
+#ifdef REDIS_HELGRIND_FRIENDLY
+            /* No new jobs? Wait and retry, because to be Helgrind
+             * (valgrind --tool=helgrind) what's needed is to take
+             * the same threads running instead to create/destroy threads
+             * as needed (otherwise valgrind will fail) */
+            unlockThreadedIO();
+            usleep(1); /* Give some time for the I/O thread to work. */
+            continue;
+#endif
             /* No new jobs in queue, exit. */
             redisLog(REDIS_DEBUG,"Thread %lld exiting, nothing to do",
                 (long long) pthread_self());