From 0677cd445197fa1ea202b276561b735c903f8c50 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 23 Nov 2015 09:10:12 +0000 Subject: [PATCH] Test for atomic ops. --- CMakeLists.txt | 12 ++++++++++++ src/libutil/ref.h | 3 +++ src/libutil/upstream.c | 2 ++ 3 files changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5e762567..01d7d940b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,6 +146,7 @@ INCLUDE(CheckIncludeFiles) INCLUDE(CheckFunctionExists) INCLUDE(CheckSymbolExists) INCLUDE(CheckCSourceCompiles) +INCLUDE(CheckCSourceRuns) INCLUDE(CheckLibraryExists) INCLUDE(CheckCCompilerFlag) INCLUDE(CMakeParseArguments) @@ -921,6 +922,16 @@ CHECK_C_SOURCE_COMPILES ("#include }" HAVE_ASM_PAUSE) ENDIF(NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS") +CHECK_C_SOURCE_RUNS(" +int main(int argc, char **argv) { + int a = 0; + if (__sync_bool_compare_and_swap(&a, 0, 1)) { + return 0; + } + return -1; +} +" HAVE_ATOMIC_BUILTINS) + # Check queue.h compatibility IF(NOT HAVE_COMPATIBLE_QUEUE_H) INCLUDE_DIRECTORIES(compat) @@ -1038,6 +1049,7 @@ ADD_SUBDIRECTORY(utils) CONFIGURE_FILE(config.h.in src/config.h) +ADD_DEFINITIONS("HAVE_CONFIG_H") ##################### INSTALLATION ########################################## diff --git a/src/libutil/ref.h b/src/libutil/ref.h index 8caab5c8f..18e2c3903 100644 --- a/src/libutil/ref.h +++ b/src/libutil/ref.h @@ -23,6 +23,9 @@ #ifndef REF_H_ #define REF_H_ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /** * @file ref.h * A set of macros to handle refcounts diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c index 63680444e..5b843451f 100644 --- a/src/libutil/upstream.c +++ b/src/libutil/upstream.c @@ -802,6 +802,7 @@ rspamd_upstream_reresolve (struct upstream_ctx *ctx) while (cur) { up = cur->data; + REF_RETAIN (up); if (up->name[0] != '/') { if (rdns_make_request_full (ctx->res, @@ -829,6 +830,7 @@ rspamd_upstream_reresolve (struct upstream_ctx *ctx) } } + REF_RELEASE (up); cur = g_list_next (cur); } } -- 2.39.5