]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Debugging help - Added assert before clearing sql_result.callback.
authorTimo Sirainen <tss@iki.fi>
Wed, 2 Sep 2015 14:19:08 +0000 (17:19 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 2 Sep 2015 14:19:08 +0000 (17:19 +0300)
If result is unrefed too many times, this still allows accessing the
callback from a debugger.

src/lib-sql/driver-cassandra.c
src/lib-sql/driver-pgsql.c

index 78f7036f0d8d2974d8a4b27e724c78a4c4b2be27..20fce28f03e2edfafddef9845ddc32b867a6eaaf 100644 (file)
@@ -470,12 +470,13 @@ static void result_finish(struct cassandra_result *result)
                result->callback(&result->api, result->context);
        } T_END;
        result->api.callback = FALSE;
-       result->callback = NULL;
 
        free_result = db->sync_result != &result->api;
        if (db->ioloop != NULL)
                io_loop_stop(db->ioloop);
 
+       i_assert(!free_result || result->api.refcount > 0);
+       result->callback = NULL;
        if (free_result)
                sql_result_unref(&result->api);
 }
index 6044bdba283b014136a0de77120cbfbfef7d76df..bbe066459ef109b13e05c8f4a392a95227f86fcf 100644 (file)
@@ -387,12 +387,13 @@ static void result_finish(struct pgsql_result *result)
                result->callback(&result->api, result->context);
        } T_END;
        result->api.callback = FALSE;
-       result->callback = NULL;
 
        free_result = db->sync_result != &result->api;
        if (db->ioloop != NULL)
                io_loop_stop(db->ioloop);
 
+       i_assert(!free_result || result->api.refcount > 0);
+       result->callback = NULL;
        if (free_result)
                sql_result_unref(&result->api);
 }