From b04a5df979ef9237a5114899e9a454c4e52fb5ac Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 15 Jan 2010 05:16:12 -0500 Subject: [PATCH] A define to make Redis more helgrind friendly --- redis.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/redis.c b/redis.c index edb2a122..7c87178d 100644 --- a/redis.c +++ b/redis.c @@ -75,6 +75,11 @@ #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());