]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
add tests for isc_atomic_xadd() and isc_atomic_xaddq() since there is some suspicion...
authorMichael Graff <mgraff@isc.org>
Tue, 11 Jan 2011 21:36:22 +0000 (21:36 +0000)
committerMichael Graff <mgraff@isc.org>
Tue, 11 Jan 2011 21:36:22 +0000 (21:36 +0000)
bin/tests/Makefile.in
bin/tests/atomic/.cvsignore [new file with mode: 0644]
bin/tests/atomic/Makefile [new file with mode: 0644]
bin/tests/atomic/t_atomic.c [new file with mode: 0644]
configure
configure.in

index a6470de25a829678e7c92f4173a57a3a8e8b8382..f077e99f34cd554e10df448bd10472abe6a4cefe 100644 (file)
@@ -13,7 +13,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: Makefile.in,v 1.142 2010/09/29 04:00:15 marka Exp $
+# $Id: Makefile.in,v 1.143 2011/01/11 21:36:22 mgraff Exp $
 
 srcdir =       @srcdir@
 VPATH =                @srcdir@
@@ -41,7 +41,7 @@ LWRESDEPLIBS =        ../../lib/lwres/liblwres.@A@
 
 LIBS =         @LIBS@
 
-SUBDIRS = db dst master mem hashes names net rbt sockaddr tasks timers system
+SUBDIRS = atomic db dst master mem hashes names net rbt sockaddr tasks timers system
 
 # Test programs that are built by default:
 # cfg_test is needed for regenerating doc/misc/options
diff --git a/bin/tests/atomic/.cvsignore b/bin/tests/atomic/.cvsignore
new file mode 100644 (file)
index 0000000..fb9be71
--- /dev/null
@@ -0,0 +1,5 @@
+Makefile
+.libs
+*.la
+*.lo
+t_atomic
diff --git a/bin/tests/atomic/Makefile b/bin/tests/atomic/Makefile
new file mode 100644 (file)
index 0000000..56a7658
--- /dev/null
@@ -0,0 +1,438 @@
+# Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 1999-2002  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: Makefile,v 1.1 2011/01/11 21:36:22 mgraff Exp $
+
+srcdir =       .
+
+top_srcdir =   ../../..
+
+# Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 1999-2001  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: Makefile,v 1.1 2011/01/11 21:36:22 mgraff Exp $
+
+# Search for machine-generated header files in the build tree,
+# and for normal headers in the source tree (${top_srcdir}).
+# We only need to look in OS-specific subdirectories for the
+# latter case, because there are no machine-generated OS-specific
+# headers.
+
+ISC_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/isc/include \
+       -I${top_srcdir}/lib/isc \
+       -I${top_srcdir}/lib/isc/include \
+       -I${top_srcdir}/lib/isc/unix/include \
+       -I${top_srcdir}/lib/isc/pthreads/include \
+       -I${top_srcdir}/lib/isc/x86_32/include
+
+ISCCC_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/isccc/include \
+       -I${top_srcdir}/lib/isccc/include
+
+ISCCFG_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/isccfg/include \
+       -I${top_srcdir}/lib/isccfg/include
+
+DNS_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/dns/include \
+       -I${top_srcdir}/lib/dns/include
+
+LWRES_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/lwres/include \
+       -I${top_srcdir}/lib/lwres/unix/include \
+       -I${top_srcdir}/lib/lwres/include
+
+BIND9_INCLUDES = -I/Users/explorer/proj/ISC/bind9/lib/bind9/include \
+       -I${top_srcdir}/lib/bind9/include
+
+TEST_INCLUDES = \
+       -I${top_srcdir}/lib/tests/include
+
+CINCLUDES =    ${TEST_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES}
+
+CDEFINES =
+CWARNINGS =
+
+# Note that we do not want to use libtool for libt_api
+DNSLIBS =      ../../../lib/dns/libdns.a  -lcrypto
+ISCLIBS =      ../../../lib/isc/libisc.a
+
+DNSDEPLIBS =   ../../../lib/dns/libdns.a
+ISCDEPLIBS =   ../../../lib/isc/libisc.a
+
+DEPLIBS =      ${DNSDEPLIBS} ${ISCDEPLIBS}
+
+LIBS =         ${DNSLIBS} ${ISCLIBS} -lpthread  -lxml2 -lz -lpthread -licucore -lm
+
+TLIB =         ../../../lib/tests/libt_api.a
+
+TARGETS =      t_atomic
+
+SRCS =         t_atomic.c
+
+# Copyright (C) 2004-2009  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 1998-2003  Internet Software Consortium.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: Makefile,v 1.1 2011/01/11 21:36:22 mgraff Exp $
+
+###
+### Common Makefile rules for BIND 9.
+###
+
+###
+### Paths
+###
+### Note: paths that vary by Makefile MUST NOT be listed
+### here, or they won't get expanded correctly.
+
+prefix =       /usr/local
+exec_prefix =  ${prefix}
+bindir =       ${exec_prefix}/bin
+sbindir =      ${exec_prefix}/sbin
+includedir =   ${prefix}/include
+libdir =       ${exec_prefix}/lib
+sysconfdir =   /etc
+localstatedir =        /var
+mandir =       ${datarootdir}/man
+datarootdir =   ${prefix}/share
+export_libdir =        ${exec_prefix}/lib/bind9/
+export_includedir = ${prefix}/include/bind9/
+
+DESTDIR =
+
+
+
+top_builddir = /Users/explorer/proj/ISC/bind9
+
+###
+### All
+###
+### Makefile may define:
+###    TARGETS
+
+all: subdirs ${TARGETS}
+
+###
+### Subdirectories
+###
+### Makefile may define:
+###    SUBDIRS
+
+ALL_SUBDIRS = ${SUBDIRS} nulldir
+
+#
+# We use a single-colon rule so that additional dependencies of
+# subdirectories can be specified after the inclusion of this file.
+# The "depend" target is treated the same way.
+#
+subdirs:
+       @for i in ${ALL_SUBDIRS}; do \
+               if [ "$$i" != "nulldir" -a -d $$i ]; then \
+                       echo "making all in `pwd`/$$i"; \
+                       (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" all) || exit 1; \
+               fi; \
+       done
+
+install:: all
+
+install clean distclean maintainer-clean doc docclean man manclean::
+       @for i in ${ALL_SUBDIRS}; do \
+               if [ "$$i" != "nulldir" -a -d $$i ]; then \
+                       echo "making $@ in `pwd`/$$i"; \
+                       (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
+               fi; \
+       done
+
+###
+### C Programs
+###
+### Makefile must define
+###    CC
+### Makefile may define
+###    CFLAGS
+###    LDFLAGS
+###    CINCLUDES
+###    CDEFINES
+###    CWARNINGS
+### User may define externally
+###     EXT_CFLAGS
+
+CC =           gcc
+CFLAGS =       -g -O2 -I/usr/include/libxml2
+LDFLAGS =      
+STD_CINCLUDES =        
+STD_CDEFINES = 
+STD_CWARNINGS =         -W -Wall -Wmissing-prototypes -Wcast-qual -Wwrite-strings -Wformat -Wpointer-arith -fno-strict-aliasing
+
+BUILD_CC = gcc
+BUILD_CFLAGS = -g -O2 -I/usr/include/libxml2
+BUILD_CPPFLAGS =  
+BUILD_LDFLAGS = 
+BUILD_LIBS = -lpthread  -lxml2 -lz -lpthread -licucore -lm
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+ALWAYS_INCLUDES = -I${top_builddir}
+ALWAYS_DEFINES = -D_REENTRANT
+ALWAYS_WARNINGS =
+
+ALL_CPPFLAGS = \
+       ${ALWAYS_INCLUDES} ${CINCLUDES} ${STD_CINCLUDES} \
+       ${ALWAYS_DEFINES} ${CDEFINES} ${STD_CDEFINES}
+
+ALL_CFLAGS = ${EXT_CFLAGS} ${ALL_CPPFLAGS} ${CFLAGS} \
+       ${ALWAYS_WARNINGS} ${STD_CWARNINGS} ${CWARNINGS}
+
+.c.o:
+       ${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -c $<
+
+SHELL = /bin/sh
+LIBTOOL = 
+LIBTOOL_MODE_COMPILE = ${LIBTOOL} 
+LIBTOOL_MODE_INSTALL = ${LIBTOOL} 
+LIBTOOL_MODE_LINK = ${LIBTOOL} 
+PURIFY = 
+
+MKDEP = ${SHELL} ${top_builddir}/make/mkdep
+
+###
+### This is a template compound command to build an executable binary with
+### an internal symbol table.
+### This process is tricky.  We first link all objects including a tentative
+### empty symbol table, then get a tentative list of symbols from the resulting
+### binary ($@tmp0).  Next, we re-link all objects, but this time with the
+### symbol table just created ($tmp@1).  The set of symbols should be the same,
+### but the corresponding addresses would be changed due to the difference on
+### the size of symbol tables.  So we create the symbol table and re-create the
+### objects once again.  Finally, we check the symbol table embedded in the
+### final binaryis consistent with the binary itself; otherwise the process is
+### terminated.
+###
+### To minimize the overhead of creating symbol tables, the autoconf switch
+### --enable-symtable takes an argument so that the symbol table can be created
+### on a per application basis: unless the argument is set to "all", the symbol
+### table is created only when a shell (environment) variable "MAKE_SYMTABLE" is
+### set to a non-null value in the rule to build the executable binary.
+###
+### Each Makefile.in that uses this macro is expected to define "LIBS" and
+### "NOSYMLIBS"; the former includes libisc with an empty symbol table, and
+### the latter includes libisc without the definition of a symbol table.
+### The rule to make the executable binary will look like this
+### binary: ${OBJS}
+###     #export MAKE_SYMTABLE="yes"; \  <- enable if symtable is always needed
+###    export BASEOBJS="${OBJS}"; \
+###    ${FINALBUILDCMD}
+###
+### Normally, ${LIBS} includes all necessary libraries to build the binary;
+### there are some exceptions however, where the rule lists some of the
+### necessary libraries explicitly in addition to (or instead of) ${LIBS},
+### like this:
+### binary: ${OBJS}
+###     cc -o $@ ${OBJS} ${OTHERLIB1} ${OTHERLIB2} ${lIBS}
+### in order to modify such a rule to use this compound command, a separate
+### variable "LIBS0" should be deinfed for the explicitly listed libraries,
+### while making sure ${LIBS} still includes libisc.  So the above rule would
+### be modified as follows:
+### binary: ${OBJS}
+###    export BASEOBJS="${OBJS}"; \
+###    export LIBS0="${OTHERLIB1} ${OTHERLIB2}"; \
+###     ${FINALBUILDCMD}
+### See bin/check/Makefile.in for a complete example of the use of LIBS0.
+###
+FINALBUILDCMD = if [ X"${MKSYMTBL_PROGRAM}" = X -o X"$${MAKE_SYMTABLE:-${ALWAYS_MAKE_SYMTABLE}}" = X ] ; then \
+               ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+               -o $@ $${BASEOBJS} $${LIBS0} ${LIBS}; \
+       else \
+               rm -f $@tmp0; \
+               ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+               -o $@tmp0 $${BASEOBJS} $${LIBS0} ${LIBS} || exit 1; \
+               rm -f $@-symtbl.c $@-symtbl.o; \
+               ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
+               -o $@-symtbl.c $@tmp0 || exit 1; \
+               $(MAKE) $@-symtbl.o || exit 1; \
+               rm -f $@tmp1; \
+               ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+               -o $@tmp1 $${BASEOBJS} $@-symtbl.o $${LIBS0} ${NOSYMLIBS} || exit 1; \
+               rm -f $@-symtbl.c $@-symtbl.o; \
+               ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
+               -o $@-symtbl.c $@tmp1 || exit 1; \
+               $(MAKE) $@-symtbl.o || exit 1; \
+               ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} \
+               -o $@tmp2 $${BASEOBJS} $@-symtbl.o $${LIBS0} ${NOSYMLIBS}; \
+               ${MKSYMTBL_PROGRAM} ${top_srcdir}/util/mksymtbl.pl \
+               -o $@-symtbl2.c $@tmp2; \
+               diff $@-symtbl.c $@-symtbl2.c || exit 1;\
+               mv $@tmp2 $@; \
+               rm -f $@tmp0 $@tmp1 $@tmp2 $@-symtbl2.c; \
+       fi
+
+cleandir: distclean
+superclean: maintainer-clean
+
+clean distclean maintainer-clean::
+       rm -f *.o *.o *.lo *.la core *.core *-symtbl.c *tmp0 *tmp1 *tmp2
+       rm -rf .depend .libs
+
+distclean maintainer-clean::
+       rm -f Makefile
+
+depend:
+       @for i in ${ALL_SUBDIRS}; do \
+               if [ "$$i" != "nulldir" -a -d $$i ]; then \
+                       echo "making depend in `pwd`/$$i"; \
+                       (cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
+               fi; \
+       done
+       @if [ X"${VPATH}" != X ] ; then \
+               if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
+                       echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       echo ${MKDEP} -vpath ${VPATH} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${MKDEP} -vpath ${VPATH} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${DEPENDEXTRA} \
+               elif [ X"${SRCS}" != X ] ; then \
+                       echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${DEPENDEXTRA} \
+               elif [ X"${PSRCS}" != X ] ; then \
+                       echo ${MKDEP} -vpath ${VPATH} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${MKDEP} -vpath ${VPATH} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${DEPENDEXTRA} \
+               fi \
+       else \
+               if [ X"${SRCS}" != X -a X"${PSRCS}" != X ] ; then \
+                       echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       echo ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${MKDEP} -ap ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${DEPENDEXTRA} \
+               elif [ X"${SRCS}" != X ] ; then \
+                       echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${SRCS}; \
+                       ${DEPENDEXTRA} \
+               elif [ X"${PSRCS}" != X ] ; then \
+                       echo ${MKDEP} ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${MKDEP} -p ${ALL_CPPFLAGS} ${ALL_CFLAGS} ${PSRCS}; \
+                       ${DEPENDEXTRA} \
+               fi \
+       fi
+
+FORCE:
+
+###
+### Libraries
+###
+
+AR =           /usr/bin/ar
+ARFLAGS =      cruv
+RANLIB =       ranlib
+
+###
+### Installation
+###
+
+INSTALL =              /usr/bin/install -c
+INSTALL_PROGRAM =      ${INSTALL}
+LINK_PROGRAM =         ln -s
+INSTALL_SCRIPT =       ${INSTALL}
+INSTALL_DATA =         ${INSTALL} -m 644
+
+###
+### Programs used when generating documentation.  It's ok for these
+### not to exist when not generating documentation.
+###
+
+XSLTPROC =             /usr/bin/xsltproc --novalid --xinclude --nonet
+PERL =                 /usr/bin/perl
+LATEX =                        /usr/texbin/latex
+PDFLATEX =             /usr/texbin/pdflatex
+W3M =                  w3m
+
+###
+### Script language program used to create internal symbol tables
+###
+MKSYMTBL_PROGRAM =     /usr/bin/perl
+
+###
+### Switch to create internal symbol table selectively
+###
+ALWAYS_MAKE_SYMTABLE = 
+
+###
+### DocBook -> HTML
+### DocBook -> man page
+###
+
+.SUFFIXES: .docbook .html .1 .2 .3 .4 .5 .6 .7 .8
+
+.docbook.html:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-docbook-html.xsl $<
+
+.docbook.1:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.2:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.3:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.4:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.5:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.6:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.7:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+.docbook.8:
+       ${XSLTPROC} -o $@ ${top_srcdir}/doc/xsl/isc-manpage.xsl $<
+
+t_atomic: t_atomic.o ${DEPLIBS} ${TLIB}
+       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_atomic.o ${TLIB} ${LIBS}
+
+test: t_atomic
+       -@./t_atomic -c ../../../t_config -b . -a
+
+testhelp:
+       @./t_atomic -h
+
+clean distclean::
+       rm -f ${TARGETS}
diff --git a/bin/tests/atomic/t_atomic.c b/bin/tests/atomic/t_atomic.c
new file mode 100644 (file)
index 0000000..0aabcca
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: t_atomic.c,v 1.1 2011/01/11 21:36:22 mgraff Exp $ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#include <isc/atomic.h>
+#include <isc/mem.h>
+#include <isc/util.h>
+#include <isc/string.h>
+#include <isc/print.h>
+#include <isc/event.h>
+#include <isc/task.h>
+
+#include <tests/t_api.h>
+
+char *progname;
+
+#define CHECK(x) RUNTIME_CHECK(ISC_R_SUCCESS == (x))
+
+isc_mem_t *mctx = NULL;
+isc_taskmgr_t *task_manager = NULL;
+
+#if defined(ISC_PLATFORM_HAVEXADD) || defined(ISC_PLATFORM_HAVEXADDQ)
+static void
+setup(void) {
+       /* 1 */ CHECK(isc_mem_create(0, 0, &mctx));
+       /* 2 */ CHECK(isc_taskmgr_create(mctx, 32, 0, &task_manager));
+}
+
+static void
+teardown(void) {
+       /* 2 */ isc_taskmgr_destroy(&task_manager);
+       /* 1 */ isc_mem_destroy(&mctx);
+}
+#endif
+
+#define TASKS 32
+#define ITERATIONS 10000
+#define COUNTS_PER_ITERATION 1000
+#define INCREMENT_64 (isc_int64_t)0x0000000010000000
+#define EXPECTED_COUNT_32 (TASKS * ITERATIONS * COUNTS_PER_ITERATION)
+#define EXPECTED_COUNT_64 (TASKS * ITERATIONS * COUNTS_PER_ITERATION * INCREMENT_64)
+
+typedef struct {
+       isc_uint32_t iteration;
+} counter_t;
+
+counter_t counters[TASKS];
+
+void do_xaddq(isc_task_t *task, isc_event_t *ev);
+
+#if defined(ISC_PLATFORM_HAVEXADD)
+isc_int32_t counter_32;
+
+void do_xadd(isc_task_t *task, isc_event_t *ev);
+
+void
+do_xadd(isc_task_t *task, isc_event_t *ev) {
+       counter_t *state = (counter_t *)ev->ev_arg;
+       int i;
+       
+       for (i = 0 ; i < COUNTS_PER_ITERATION ; i++) {
+               isc_atomic_xadd(&counter_32, 1);
+       }
+
+       state->iteration++;
+       if (state->iteration < ITERATIONS) {
+               isc_task_send(task, &ev);
+       } else {
+               isc_event_free(&ev);
+       }
+}
+
+static void
+test_atomic_xadd() {
+       int test_result;
+       isc_task_t *tasks[TASKS];
+       isc_event_t *event;
+       int i;
+
+       t_assert("test_atomic_xadd", 1, T_REQUIRED, "%s",
+                "ensure that isc_atomic_xadd() works.");
+
+       setup();
+       
+       memset(counters, 0, sizeof(counters));
+       counter_32 = 0;
+       
+       /*
+        * Create our tasks, and allocate an event to get the counters going.
+        */
+       for (i = 0 ; i < TASKS ; i++) {
+               tasks[i] = NULL;
+               CHECK(isc_task_create(task_manager, 0, &tasks[i]));
+               event = isc_event_allocate(mctx, NULL, 1000, do_xadd,
+                                          &counters[i], sizeof(struct isc_event));
+               isc_task_sendanddetach(&tasks[i], &event);
+       }
+
+       teardown();
+
+       test_result = T_PASS;
+       t_info("32-bit counter %d, expected %d\n", counter_32, EXPECTED_COUNT_32);
+       if (counter_32 != EXPECTED_COUNT_32)
+               test_result = T_FAIL;
+       t_result(test_result);
+       
+       counter_32 = 0;
+}
+#endif
+
+#if defined(ISC_PLATFORM_HAVEXADDQ)
+isc_int64_t counter_64;
+
+void do_xaddq(isc_task_t *task, isc_event_t *ev);
+
+void
+do_xaddq(isc_task_t *task, isc_event_t *ev) {
+       counter_t *state = (counter_t *)ev->ev_arg;
+       int i;
+       
+       for (i = 0 ; i < COUNTS_PER_ITERATION ; i++) {
+               isc_atomic_xaddq(&counter_64, INCREMENT_64);
+       }
+
+       state->iteration++;
+       if (state->iteration < ITERATIONS) {
+               isc_task_send(task, &ev);
+       } else {
+               isc_event_free(&ev);
+       }
+}
+
+static void
+test_atomic_xaddq() {
+       int test_result;
+       isc_task_t *tasks[TASKS];
+       isc_event_t *event;
+       int i;
+
+       t_assert("test_atomic_xaddq", 1, T_REQUIRED, "%s",
+                "ensure that isc_atomic_xaddq() works.");
+
+       setup();
+       
+       memset(counters, 0, sizeof(counters));
+       counter_64 = 0;
+       
+       /*
+        * Create our tasks, and allocate an event to get the counters going.
+        */
+       for (i = 0 ; i < TASKS ; i++) {
+               tasks[i] = NULL;
+               CHECK(isc_task_create(task_manager, 0, &tasks[i]));
+               event = isc_event_allocate(mctx, NULL, 1000, do_xaddq,
+                                          &counters[i], sizeof(struct isc_event));
+               isc_task_sendanddetach(&tasks[i], &event);
+       }
+
+       teardown();
+
+       test_result = T_PASS;
+       t_info("64-bit counter %"ISC_PRINT_QUADFORMAT"d, expected %"ISC_PRINT_QUADFORMAT"d\n",
+              counter_64, EXPECTED_COUNT_64);
+       if (counter_64 != EXPECTED_COUNT_64)
+               test_result = T_FAIL;
+       t_result(test_result);
+       
+       counter_64 = 0;
+}
+#endif
+
+
+testspec_t T_testlist[] = {
+#if defined(ISC_PLATFORM_HAVEXADD)
+       { test_atomic_xadd,     "test_atomic_xadd"              },
+#endif
+#if defined(ISC_PLATFORM_HAVEXADDQ)
+       { test_atomic_xaddq,    "test_atomic_xaddq"             },
+#endif
+       { NULL, NULL }
+};
+
index ca284bc9fae351af85afb1dcf75f73722798975f..884fb4b50f47fade6d0eba302524d7ca9dd74e67 100755 (executable)
--- a/configure
+++ b/configure
@@ -14,7 +14,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 #
-# $Id: configure,v 1.491 2010/12/23 04:09:28 marka Exp $
+# $Id: configure,v 1.492 2011/01/11 21:36:21 mgraff Exp $
 #
 # Portions Copyright (C) 1996-2001  Nominum, Inc.
 #
@@ -26834,7 +26834,7 @@ ac_config_commands="$ac_config_commands chmod"
 # elsewhere if there's a good reason for doing so.
 #
 
-ac_config_files="$ac_config_files Makefile make/Makefile make/mkdep lib/Makefile lib/isc/Makefile lib/isc/include/Makefile lib/isc/include/isc/Makefile lib/isc/include/isc/platform.h lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isc/nls/Makefile lib/isc/$thread_dir/Makefile lib/isc/$thread_dir/include/Makefile lib/isc/$thread_dir/include/isc/Makefile lib/isc/$arch/Makefile lib/isc/$arch/include/Makefile lib/isc/$arch/include/isc/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/irs/Makefile lib/irs/include/Makefile lib/irs/include/irs/Makefile lib/irs/include/irs/netdb.h lib/irs/include/irs/platform.h lib/dns/Makefile lib/dns/include/Makefile lib/dns/include/dns/Makefile lib/dns/include/dst/Makefile lib/export/Makefile lib/export/isc/Makefile lib/export/isc/include/Makefile lib/export/isc/include/isc/Makefile lib/export/isc/unix/Makefile lib/export/isc/unix/include/Makefile lib/export/isc/unix/include/isc/Makefile lib/export/isc/nls/Makefile lib/export/isc/$thread_dir/Makefile lib/export/isc/$thread_dir/include/Makefile lib/export/isc/$thread_dir/include/isc/Makefile lib/export/dns/Makefile lib/export/dns/include/Makefile lib/export/dns/include/dns/Makefile lib/export/dns/include/dst/Makefile lib/export/irs/Makefile lib/export/irs/include/Makefile lib/export/irs/include/irs/Makefile lib/export/isccfg/Makefile lib/export/isccfg/include/Makefile lib/export/isccfg/include/isccfg/Makefile lib/export/samples/Makefile lib/export/samples/Makefile-postinstall lib/bind9/Makefile lib/bind9/include/Makefile lib/bind9/include/bind9/Makefile lib/lwres/Makefile lib/lwres/include/Makefile lib/lwres/include/lwres/Makefile lib/lwres/include/lwres/netdb.h lib/lwres/include/lwres/platform.h lib/lwres/man/Makefile lib/lwres/unix/Makefile lib/lwres/unix/include/Makefile lib/lwres/unix/include/lwres/Makefile lib/tests/Makefile lib/tests/include/Makefile lib/tests/include/tests/Makefile bin/Makefile bin/check/Makefile bin/confgen/Makefile bin/confgen/unix/Makefile bin/named/Makefile bin/named/unix/Makefile bin/rndc/Makefile bin/dig/Makefile bin/nsupdate/Makefile bin/tests/Makefile bin/tests/names/Makefile bin/tests/master/Makefile bin/tests/rbt/Makefile bin/tests/db/Makefile bin/tests/tasks/Makefile bin/tests/timers/Makefile bin/tests/dst/Makefile bin/tests/mem/Makefile bin/tests/hashes/Makefile bin/tests/net/Makefile bin/tests/sockaddr/Makefile bin/tests/system/Makefile bin/tests/system/conf.sh bin/tests/system/gost/prereq.sh bin/tests/system/filter-aaaa/Makefile bin/tests/system/lwresd/Makefile bin/tests/system/tkey/Makefile bin/tests/headerdep_test.sh bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile bin/dnssec/Makefile bin/pkcs11/Makefile contrib/check-secure-delegation.pl doc/Makefile doc/arm/Makefile doc/misc/Makefile isc-config.sh doc/xsl/Makefile doc/xsl/isc-docbook-chunk.xsl doc/xsl/isc-docbook-html.xsl doc/xsl/isc-docbook-latex.xsl doc/xsl/isc-manpage.xsl doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter contrib/zone-edit.sh"
+ac_config_files="$ac_config_files Makefile make/Makefile make/mkdep lib/Makefile lib/isc/Makefile lib/isc/include/Makefile lib/isc/include/isc/Makefile lib/isc/include/isc/platform.h lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isc/nls/Makefile lib/isc/$thread_dir/Makefile lib/isc/$thread_dir/include/Makefile lib/isc/$thread_dir/include/isc/Makefile lib/isc/$arch/Makefile lib/isc/$arch/include/Makefile lib/isc/$arch/include/isc/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/irs/Makefile lib/irs/include/Makefile lib/irs/include/irs/Makefile lib/irs/include/irs/netdb.h lib/irs/include/irs/platform.h lib/dns/Makefile lib/dns/include/Makefile lib/dns/include/dns/Makefile lib/dns/include/dst/Makefile lib/export/Makefile lib/export/isc/Makefile lib/export/isc/include/Makefile lib/export/isc/include/isc/Makefile lib/export/isc/unix/Makefile lib/export/isc/unix/include/Makefile lib/export/isc/unix/include/isc/Makefile lib/export/isc/nls/Makefile lib/export/isc/$thread_dir/Makefile lib/export/isc/$thread_dir/include/Makefile lib/export/isc/$thread_dir/include/isc/Makefile lib/export/dns/Makefile lib/export/dns/include/Makefile lib/export/dns/include/dns/Makefile lib/export/dns/include/dst/Makefile lib/export/irs/Makefile lib/export/irs/include/Makefile lib/export/irs/include/irs/Makefile lib/export/isccfg/Makefile lib/export/isccfg/include/Makefile lib/export/isccfg/include/isccfg/Makefile lib/export/samples/Makefile lib/export/samples/Makefile-postinstall lib/bind9/Makefile lib/bind9/include/Makefile lib/bind9/include/bind9/Makefile lib/lwres/Makefile lib/lwres/include/Makefile lib/lwres/include/lwres/Makefile lib/lwres/include/lwres/netdb.h lib/lwres/include/lwres/platform.h lib/lwres/man/Makefile lib/lwres/unix/Makefile lib/lwres/unix/include/Makefile lib/lwres/unix/include/lwres/Makefile lib/tests/Makefile lib/tests/include/Makefile lib/tests/include/tests/Makefile bin/Makefile bin/check/Makefile bin/confgen/Makefile bin/confgen/unix/Makefile bin/named/Makefile bin/named/unix/Makefile bin/rndc/Makefile bin/dig/Makefile bin/nsupdate/Makefile bin/tests/Makefile bin/tests/names/Makefile bin/tests/atomic/Makefile bin/tests/master/Makefile bin/tests/rbt/Makefile bin/tests/db/Makefile bin/tests/tasks/Makefile bin/tests/timers/Makefile bin/tests/dst/Makefile bin/tests/mem/Makefile bin/tests/hashes/Makefile bin/tests/net/Makefile bin/tests/sockaddr/Makefile bin/tests/system/Makefile bin/tests/system/conf.sh bin/tests/system/gost/prereq.sh bin/tests/system/filter-aaaa/Makefile bin/tests/system/lwresd/Makefile bin/tests/system/tkey/Makefile bin/tests/headerdep_test.sh bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile bin/dnssec/Makefile bin/pkcs11/Makefile contrib/check-secure-delegation.pl doc/Makefile doc/arm/Makefile doc/misc/Makefile isc-config.sh doc/xsl/Makefile doc/xsl/isc-docbook-chunk.xsl doc/xsl/isc-docbook-html.xsl doc/xsl/isc-docbook-latex.xsl doc/xsl/isc-manpage.xsl doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter contrib/zone-edit.sh"
 
 
 #
index d4dfa54ca055291f50f28248d1dcb9b940d1ac40..37afe35318e80ae65fd9f0bbd5a0216201579a5d 100644 (file)
@@ -18,7 +18,7 @@ AC_DIVERT_PUSH(1)dnl
 esyscmd([sed "s/^/# /" COPYRIGHT])dnl
 AC_DIVERT_POP()dnl
 
-AC_REVISION($Revision: 1.509 $)
+AC_REVISION($Revision: 1.510 $)
 
 AC_INIT(lib/dns/name.c)
 AC_PREREQ(2.59)
@@ -3238,124 +3238,125 @@ AC_CONFIG_COMMANDS(
 #
 
 AC_CONFIG_FILES([
+  make/Makefile
+  make/mkdep
        Makefile
-       make/Makefile
-       make/mkdep
-       lib/Makefile
-       lib/isc/Makefile
-       lib/isc/include/Makefile
-       lib/isc/include/isc/Makefile
-       lib/isc/include/isc/platform.h
-       lib/isc/unix/Makefile
-       lib/isc/unix/include/Makefile
-       lib/isc/unix/include/isc/Makefile
-       lib/isc/nls/Makefile
-       lib/isc/$thread_dir/Makefile
-       lib/isc/$thread_dir/include/Makefile
-       lib/isc/$thread_dir/include/isc/Makefile
-       lib/isc/$arch/Makefile
-       lib/isc/$arch/include/Makefile
-       lib/isc/$arch/include/isc/Makefile
-       lib/isccc/Makefile
-       lib/isccc/include/Makefile
-       lib/isccc/include/isccc/Makefile
-       lib/isccfg/Makefile
-       lib/isccfg/include/Makefile
-       lib/isccfg/include/isccfg/Makefile
-       lib/irs/Makefile
-       lib/irs/include/Makefile
-       lib/irs/include/irs/Makefile
-       lib/irs/include/irs/netdb.h
-       lib/irs/include/irs/platform.h
-       lib/dns/Makefile
-       lib/dns/include/Makefile
-       lib/dns/include/dns/Makefile
-       lib/dns/include/dst/Makefile
-       lib/export/Makefile
-       lib/export/isc/Makefile
-       lib/export/isc/include/Makefile
-       lib/export/isc/include/isc/Makefile
-       lib/export/isc/unix/Makefile
-       lib/export/isc/unix/include/Makefile
-       lib/export/isc/unix/include/isc/Makefile
-       lib/export/isc/nls/Makefile
-       lib/export/isc/$thread_dir/Makefile
-       lib/export/isc/$thread_dir/include/Makefile
-       lib/export/isc/$thread_dir/include/isc/Makefile
-       lib/export/dns/Makefile
-       lib/export/dns/include/Makefile
-       lib/export/dns/include/dns/Makefile
-       lib/export/dns/include/dst/Makefile
-       lib/export/irs/Makefile
-       lib/export/irs/include/Makefile
-       lib/export/irs/include/irs/Makefile
-       lib/export/isccfg/Makefile
-       lib/export/isccfg/include/Makefile
-       lib/export/isccfg/include/isccfg/Makefile
-       lib/export/samples/Makefile
-       lib/export/samples/Makefile-postinstall
-       lib/bind9/Makefile
-       lib/bind9/include/Makefile
-       lib/bind9/include/bind9/Makefile
-       lib/lwres/Makefile
-       lib/lwres/include/Makefile
-       lib/lwres/include/lwres/Makefile
-       lib/lwres/include/lwres/netdb.h
-       lib/lwres/include/lwres/platform.h
-       lib/lwres/man/Makefile
-       lib/lwres/unix/Makefile
-       lib/lwres/unix/include/Makefile
-       lib/lwres/unix/include/lwres/Makefile
-       lib/tests/Makefile
-       lib/tests/include/Makefile
-       lib/tests/include/tests/Makefile
        bin/Makefile
        bin/check/Makefile
        bin/confgen/Makefile
        bin/confgen/unix/Makefile
+       bin/dig/Makefile
+       bin/dnssec/Makefile
        bin/named/Makefile
        bin/named/unix/Makefile
-       bin/rndc/Makefile
-       bin/dig/Makefile
        bin/nsupdate/Makefile
+       bin/pkcs11/Makefile
+       bin/rndc/Makefile
        bin/tests/Makefile
-       bin/tests/names/Makefile
-       bin/tests/master/Makefile
-       bin/tests/rbt/Makefile
+       bin/tests/atomic/Makefile
        bin/tests/db/Makefile
-       bin/tests/tasks/Makefile
-       bin/tests/timers/Makefile
        bin/tests/dst/Makefile
-       bin/tests/mem/Makefile
        bin/tests/hashes/Makefile
+       bin/tests/headerdep_test.sh
+       bin/tests/master/Makefile
+       bin/tests/mem/Makefile
+       bin/tests/names/Makefile
        bin/tests/net/Makefile
+       bin/tests/rbt/Makefile
        bin/tests/sockaddr/Makefile
        bin/tests/system/Makefile
        bin/tests/system/conf.sh
-       bin/tests/system/gost/prereq.sh
        bin/tests/system/filter-aaaa/Makefile
+       bin/tests/system/gost/prereq.sh
        bin/tests/system/lwresd/Makefile
        bin/tests/system/tkey/Makefile
-       bin/tests/headerdep_test.sh
+       bin/tests/tasks/Makefile
+       bin/tests/timers/Makefile
        bin/tests/virtual-time/Makefile
        bin/tests/virtual-time/conf.sh
        bin/tools/Makefile
-       bin/dnssec/Makefile
-       bin/pkcs11/Makefile
        contrib/check-secure-delegation.pl
+       contrib/zone-edit.sh
        doc/Makefile
        doc/arm/Makefile
+       doc/doxygen/Doxyfile
+       doc/doxygen/Makefile
+       doc/doxygen/doxygen-input-filter
        doc/misc/Makefile
-       isc-config.sh
        doc/xsl/Makefile
        doc/xsl/isc-docbook-chunk.xsl
        doc/xsl/isc-docbook-html.xsl
        doc/xsl/isc-docbook-latex.xsl
        doc/xsl/isc-manpage.xsl
-       doc/doxygen/Doxyfile
-       doc/doxygen/Makefile
-       doc/doxygen/doxygen-input-filter
-       contrib/zone-edit.sh
+       isc-config.sh
+       lib/Makefile
+       lib/bind9/Makefile
+       lib/bind9/include/Makefile
+       lib/bind9/include/bind9/Makefile
+       lib/dns/Makefile
+       lib/dns/include/Makefile
+       lib/dns/include/dns/Makefile
+       lib/dns/include/dst/Makefile
+       lib/export/Makefile
+       lib/export/dns/Makefile
+       lib/export/dns/include/Makefile
+       lib/export/dns/include/dns/Makefile
+       lib/export/dns/include/dst/Makefile
+       lib/export/irs/Makefile
+       lib/export/irs/include/Makefile
+       lib/export/irs/include/irs/Makefile
+       lib/export/isc/$thread_dir/Makefile
+       lib/export/isc/$thread_dir/include/Makefile
+       lib/export/isc/$thread_dir/include/isc/Makefile
+       lib/export/isc/Makefile
+       lib/export/isc/include/Makefile
+       lib/export/isc/include/isc/Makefile
+       lib/export/isc/nls/Makefile
+       lib/export/isc/unix/Makefile
+       lib/export/isc/unix/include/Makefile
+       lib/export/isc/unix/include/isc/Makefile
+       lib/export/isccfg/Makefile
+       lib/export/isccfg/include/Makefile
+       lib/export/isccfg/include/isccfg/Makefile
+       lib/export/samples/Makefile
+       lib/export/samples/Makefile-postinstall
+       lib/irs/Makefile
+       lib/irs/include/Makefile
+       lib/irs/include/irs/Makefile
+       lib/irs/include/irs/netdb.h
+       lib/irs/include/irs/platform.h
+       lib/isc/$arch/Makefile
+       lib/isc/$arch/include/Makefile
+       lib/isc/$arch/include/isc/Makefile
+       lib/isc/$thread_dir/Makefile
+       lib/isc/$thread_dir/include/Makefile
+       lib/isc/$thread_dir/include/isc/Makefile
+       lib/isc/Makefile
+       lib/isc/include/Makefile
+       lib/isc/include/isc/Makefile
+       lib/isc/include/isc/platform.h
+       lib/isc/nls/Makefile
+       lib/isc/unix/Makefile
+       lib/isc/unix/include/Makefile
+       lib/isc/unix/include/isc/Makefile
+       lib/isccc/Makefile
+       lib/isccc/include/Makefile
+       lib/isccc/include/isccc/Makefile
+       lib/isccfg/Makefile
+       lib/isccfg/include/Makefile
+       lib/isccfg/include/isccfg/Makefile
+       lib/lwres/Makefile
+       lib/lwres/include/Makefile
+       lib/lwres/include/lwres/Makefile
+       lib/lwres/include/lwres/netdb.h
+       lib/lwres/include/lwres/platform.h
+       lib/lwres/man/Makefile
+       lib/lwres/unix/Makefile
+       lib/lwres/unix/include/Makefile
+       lib/lwres/unix/include/lwres/Makefile
+       lib/tests/Makefile
+       lib/tests/include/Makefile
+       lib/tests/include/tests/Makefile
 ])
 
 #