From 4a632a6038f37b4d72c52f580d6a396c5ee3fe12 Mon Sep 17 00:00:00 2001 From: Pietro Cerutti Date: Thu, 2 Oct 2014 15:47:33 +0200 Subject: [PATCH] Make sure to disconnect the adapter in the destructor --- adapters/qt.h | 18 +++++++++++++----- examples/example-qt.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/adapters/qt.h b/adapters/qt.h index d216ad7..5cc02e6 100644 --- a/adapters/qt.h +++ b/adapters/qt.h @@ -1,6 +1,6 @@ /*- * Copyright (C) 2014 Pietro Cerutti - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -9,7 +9,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -69,12 +69,19 @@ class RedisQtAdapter : public QObject { } public: - RedisQtAdapter(QObject * parent = 0) + RedisQtAdapter(QObject * parent = 0) : QObject(parent), m_ctx(0), m_read(0), m_write(0) { } - ~RedisQtAdapter() { } + ~RedisQtAdapter() { + if (m_ctx != 0) { + m_ctx->ev.data = NULL; + } + } - void setContext(redisAsyncContext * ac) { + int setContext(redisAsyncContext * ac) { + if (ac->ev.data != NULL) { + return REDIS_ERR; + } m_ctx = ac; m_ctx->ev.data = this; m_ctx->ev.addRead = RedisQtAddRead; @@ -82,6 +89,7 @@ class RedisQtAdapter : public QObject { m_ctx->ev.addWrite = RedisQtAddWrite; m_ctx->ev.delWrite = RedisQtDelWrite; m_ctx->ev.cleanup = RedisQtCleanup; + return REDIS_OK; } private: diff --git a/examples/example-qt.h b/examples/example-qt.h index 1136f54..374f476 100644 --- a/examples/example-qt.h +++ b/examples/example-qt.h @@ -13,7 +13,7 @@ class ExampleQt : public QObject { signals: void finished(); - + public slots: void run();