From: Vsevolod Stakhov Date: Mon, 23 Nov 2015 09:10:12 +0000 (+0000) Subject: Test for atomic ops. X-Git-Tag: 1.1.0~507 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0677cd445197fa1ea202b276561b735c903f8c50;p=thirdparty%2Frspamd.git Test for atomic ops. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index c5e7625677..01d7d940bf 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 8caab5c8f3..18e2c39031 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 63680444ed..5b843451f2 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); } }