Skip to content
Browse files

Added support for Guru Mediation, and raising a guru mediation if ref…

…Count <= 0 but decrRefCount is called against such an object
  • Loading branch information...
1 parent 55017f9 commit c651fd9ee3ce3d1dca7cc8dbf7648cd588255bd9 @antirez committed Apr 17, 2010
Showing with 12 additions and 0 deletions.
  1. +12 −0 redis.c
View
12 redis.c
@@ -237,7 +237,9 @@ static char* strencoding[] = {
/* We can print the stacktrace, so our assert is defined this way: */
#define redisAssert(_e) ((_e)?(void)0 : (_redisAssert(#_e,__FILE__,__LINE__),_exit(1)))
+#define redisPanic(_e) _redisPanic(#_e,__FILE__,__LINE__),_exit(1)
static void _redisAssert(char *estr, char *file, int line);
+static void _redisPanic(char *msg, char *file, int line);
/*================================= Data types ============================== */
@@ -2851,6 +2853,7 @@ static void incrRefCount(robj *o) {
static void decrRefCount(void *obj) {
robj *o = obj;
+ if (o->refcount <= 0) redisPanic("decrRefCount against refcount <= 0");
/* Object is a key of a swapped out value, or in the process of being
* loaded. */
if (server.vm_enabled &&
@@ -9859,6 +9862,15 @@ static void _redisAssert(char *estr, char *file, int line) {
#endif
}
+static void _redisPanic(char *msg, char *file, int line) {
+ redisLog(REDIS_WARNING,"!!! Software Failure. Press left mouse button to continue");
+ redisLog(REDIS_WARNING,"Guru Mediation: %s #%s:%d",msg,file,line);
@cmelbye
cmelbye added a note Apr 17, 2010

Did you mean to say Guru Meditation?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+#ifdef HAVE_BACKTRACE
+ redisLog(REDIS_WARNING,"(forcing SIGSEGV in order to print the stack trace)");
+ *((char*)-1) = 'x';
+#endif
+}
+
/* =================================== Main! ================================ */
#ifdef __linux__

4 comments on commit c651fd9

@gildo
gildo commented on c651fd9 Apr 17, 2010

lol

@superfeedr

:D

@chrisforbes

I'm pretty sure the original was "meditation"

Please sign in to comment.
Something went wrong with that request. Please try again.