...
 
Commits (21)
......@@ -74,10 +74,6 @@ stages:
# CentOS
.centos-centos6-amd64: &centos_centos6_amd64_image
image: "$CI_REGISTRY_IMAGE:centos-centos6-amd64"
<<: *linux_amd64
.centos-centos7-amd64: &centos_centos7_amd64_image
image: "$CI_REGISTRY_IMAGE:centos-centos7-amd64"
<<: *linux_amd64
......@@ -187,13 +183,10 @@ stages:
${CONFIGURE} \
--disable-maintainer-mode \
--enable-developer \
--with-libtool \
--with-cmocka \
--with-libxml2 \
--with-json-c \
--prefix=$HOME/.local \
--without-make-clean \
--with-python=python3 \
$EXTRA_CONFIGURE \
|| cat config.log
......@@ -202,7 +195,7 @@ stages:
stage: build
before_script:
- test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}"
- test -n "${OOT_BUILD_WORKSPACE}" && mkdir "${OOT_BUILD_WORKSPACE}" && cd "${OOT_BUILD_WORKSPACE}"
- test -n "${OUT_OF_TREE_WORKSPACE}" && mkdir "${OUT_OF_TREE_WORKSPACE}" && cd "${OUT_OF_TREE_WORKSPACE}"
script:
- *configure
- make -j${BUILD_PARALLEL_JOBS:-1} -k all V=1
......@@ -260,6 +253,7 @@ stages:
<<: *default_triggering_rules
stage: system
before_script:
- test -n "${OUT_OF_TREE_WORKSPACE}" && cd "${OUT_OF_TREE_WORKSPACE}"
- *setup_interfaces
- *setup_softhsm
script:
......@@ -488,7 +482,7 @@ docs:
stage: docs
before_script:
- test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}"
- test -n "${OOT_BUILD_WORKSPACE}" && mkdir "${OOT_BUILD_WORKSPACE}" && cd "${OOT_BUILD_WORKSPACE}"
- test -n "${OUT_OF_TREE_WORKSPACE}" && mkdir "${OUT_OF_TREE_WORKSPACE}" && cd "${OUT_OF_TREE_WORKSPACE}"
script:
- *configure
- make -j${BUILD_PARALLEL_JOBS:-1} -k doc V=1
......@@ -539,30 +533,6 @@ unit:gcc:alpine3.12:amd64:
- job: gcc:alpine3.12:amd64
artifacts: true
# Jobs for regular GCC builds on CentOS 6 (amd64)
gcc:centos6:amd64:
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON}"
EXTRA_CONFIGURE: "--with-libidn2 --disable-warn-error --without-python"
<<: *centos_centos6_amd64_image
<<: *build_job
system:gcc:centos6:amd64:
<<: *centos_centos6_amd64_image
<<: *system_test_job
needs:
- job: gcc:centos6:amd64
artifacts: true
unit:gcc:centos6:amd64:
<<: *centos_centos6_amd64_image
<<: *unit_test_job
needs:
- job: gcc:centos6:amd64
artifacts: true
# Jobs for regular GCC builds on CentOS 7 (amd64)
gcc:centos7:amd64:
......@@ -728,10 +698,19 @@ gcc:out-of-tree:
CONFIGURE: ../configure
EXTRA_CONFIGURE: "--enable-dnstap --with-libidn2 --with-lmdb"
RUN_MAKE_INSTALL: 1
OOT_BUILD_WORKSPACE: workspace
OUT_OF_TREE_WORKSPACE: workspace
<<: *base_image
<<: *build_job
system:gcc:out-of-tree:
variables:
OUT_OF_TREE_WORKSPACE: workspace
needs:
- job: gcc:out-of-tree
artifacts: true
<<: *base_image
<<: *system_test_job
# Jobs for tarball GCC builds on Debian 10 "buster" (amd64)
gcc:tarball:
......@@ -804,7 +783,7 @@ gcc:sid:i386:
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON}"
EXTRA_CONFIGURE: "--with-libidn2 --without-python"
EXTRA_CONFIGURE: "--with-libidn2"
<<: *debian_sid_i386_image
<<: *build_job
......@@ -828,7 +807,7 @@ gcc:tumbleweed:amd64:
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON}"
EXTRA_CONFIGURE: "--with-libidn2 --with-python --with-gssapi=/usr/lib/mit/bin/krb5-config"
EXTRA_CONFIGURE: "--with-libidn2 --with-gssapi=/usr/lib/mit/bin/krb5-config"
<<: *tumbleweed_latest_amd64_image
<<: *build_job
......@@ -1036,7 +1015,6 @@ clang:buster:amd64:
variables:
CC: ${CLANG}
CFLAGS: "${CFLAGS_COMMON} -Wenum-conversion"
EXTRA_CONFIGURE: "--with-python=python3"
<<: *debian_buster_amd64_image
<<: *build_job
......@@ -1323,13 +1301,13 @@ respdiff:
BIND_BASELINE_VERSION: v9_11_3
script:
- autoreconf -fi
- ./configure --without-make-clean
- ./configure
- make -j${BUILD_PARALLEL_JOBS:-1} V=1
- *setup_interfaces
- git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.isc.org/isc-private/bind-qa.git
- git clone --branch "${BIND_BASELINE_VERSION}" --depth 1 https://gitlab.isc.org/isc-projects/bind9.git refbind
- cd refbind/
- ./configure --without-make-clean
- ./configure
- make -j${BUILD_PARALLEL_JOBS:-1} V=1
- cd ../bind-qa/bind9/respdiff
- bash respdiff.sh -q "${PWD}/100k_mixed.txt" -c 3 -w "${PWD}/rspworkdir" "${CI_PROJECT_DIR}/refbind" "${CI_PROJECT_DIR}"
......
5481. [placeholder]
5480. [placeholder]
5479. [placeholder]
5478. [placeholder]
5477. [bug] The idle timeout for connected TCP sockets is now
derived from the client query processing timeout
configured for a resolver. [GL #2024]
......
......@@ -208,9 +208,6 @@ installed:
To see a full list of configuration options, run `configure --help`.
To build shared libraries, specify `--with-libtool` on the `configure`
command line.
For the server to support DNSSEC, you need to build it with crypto support.
To use OpenSSL, you should have OpenSSL 1.0.2e or newer installed. If the
OpenSSL library is installed in a nonstandard location, specify the prefix
......
......@@ -9664,7 +9664,7 @@ load_zones(named_server_t *server, bool init, bool reconfig) {
isc_refcount_increment(&zl->refs);
result = dns_view_asyncload(view, reconfig, view_loaded, zl);
if (result != ISC_R_SUCCESS) {
(void)isc_refcount_decrement(&zl->refs);
isc_refcount_decrement1(&zl->refs);
goto cleanup;
}
}
......
......@@ -17,7 +17,7 @@
DIGOPTS="+norec -p ${PORT}"
status=0
status=1
echo_i "testing that a ccTLD referral gets a full glue set from the root zone"
$DIG $DIGOPTS @10.53.0.1 foo.bar.fi. A >dig.out || status=1
......
......@@ -294,21 +294,27 @@ elif [ "$sanitizer_summaries" -ne 0 ]; then
echoinfo "I:$systest:$sanitizer_summaries sanitizer report(s) found"
fi
print_outstanding_files() {
if test -d ${srcdir}/../../../.git; then
git status -su --ignored "${systest}" 2>/dev/null | \
sed -n -e 's|^?? \(.*\)|\1|p' \
-e 's|^!! \(.*/named.run\)$|\1|p' \
-e 's|^!! \(.*/named.memstats\)$|\1|p'
fi
}
if [ $status -ne 0 ]; then
echofail "R:$systest:FAIL"
else
echopass "R:$systest:PASS"
if $clean; then
( cd "${systest}" && $SHELL clean.sh "$@" )
if [ "${srcdir}" != "${builddir}" ]; then
rm -rf "./${systest}" ## FIXME (this also removes compiled binaries)
fi
if test -d ${srcdir}/../../../.git; then
git status -su --ignored "${systest}" 2>/dev/null | \
sed -n -e 's|^?? \(.*\)|I:file \1 not removed|p' \
-e 's|^!! \(.*/named.run\)$|I:file \1 not removed|p' \
-e 's|^!! \(.*/named.memstats\)$|I:file \1 not removed|p'
fi
( cd "${systest}" && $SHELL clean.sh "$@" )
if [ "${srcdir}" = "${builddir}" ]; then
print_outstanding_files
else
print_outstanding_files | xargs rm -rfv
find "./${systest}" \( -type d -empty -o -name Makefile.in \) -delete
fi
fi
fi
......
......@@ -1702,7 +1702,6 @@ report() {
# these lines are only printed if run with --enable-full-report
if test "yes" = "$enable_full_report"; then
test -z "$PYTHON" || echo " Python tools (--with-python)"
test -z "$LIBXML2_LIBS" || echo " XML statistics (--with-libxml2)"
test -z "$JSON_C_LIBS" || echo " JSON statistics (--with-json-c): $JSON_C_CFLAGS $JSON_C_LIBS"
test -z "$ZLIB_LIBS" || echo " HTTP zlib compression (--with-zlib)"
......@@ -1774,7 +1773,6 @@ report() {
test "no" = "$with_cmocka" && echo " CMocka Unit Testing Framework (--with-cmocka)"
test -z "$PYTHON" && echo " Python tools (--with-python)"
test -z "$LIBXML2_LIBS" && echo " XML statistics (--with-libxml2)"
test -z "$JSON_C_LIBS" && echo " JSON statistics (--with-json-c)"
test -z "$ZLIB_LIBS" && echo " HTTP zlib compression (--with-zlib)"
......
......@@ -39,7 +39,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.sp
\fBdnssec\-importkey\fP reads a public DNSKEY record and generates a pair
of .key/.private files. The DNSKEY record may be read from an existing
\&.key file, in which case a corresponding .private file is
.key file, in which case a corresponding .private file is
generated, or it may be read from any other file or from the standard
input, in which case both .key and .private files are generated.
.sp
......
......@@ -555,7 +555,7 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr,
result = isc_task_onshutdown(cleaner->task,
cleaner_shutdown_action, cache);
if (result != ISC_R_SUCCESS) {
isc_refcount_decrement(&cleaner->cache->live_tasks);
isc_refcount_decrement0(&cleaner->cache->live_tasks);
UNEXPECTED_ERROR(__FILE__, __LINE__,
"cache cleaner: "
"isc_task_onshutdown() failed: %s",
......@@ -1020,7 +1020,7 @@ cleaner_shutdown_action(isc_task_t *task, isc_event_t *event) {
/* Make sure we don't reschedule anymore. */
(void)isc_task_purge(task, NULL, DNS_EVENT_CACHECLEAN, NULL);
INSIST(isc_refcount_decrement(&cache->live_tasks) == 1);
isc_refcount_decrementz(&cache->live_tasks);
cache_free(cache);
}
......
......@@ -582,7 +582,7 @@ dns_client_createx(isc_mem_t *mctx, isc_appctx_t *actx, isc_taskmgr_t *taskmgr,
return (ISC_R_SUCCESS);
cleanup_references:
isc_refcount_decrement(&client->references);
isc_refcount_decrementz(&client->references);
isc_refcount_destroy(&client->references);
cleanup_dispatchmgr:
if (dispatchv4 != NULL) {
......@@ -1787,7 +1787,7 @@ dns_client_startrequest(dns_client_t *client, dns_message_t *qmessage,
return (ISC_R_SUCCESS);
}
isc_refcount_decrement(&client->references);
isc_refcount_decrement1(&client->references);
LOCK(&client->lock);
ISC_LIST_UNLINK(client->reqctxs, ctx, link);
......@@ -2946,7 +2946,7 @@ dns_client_startupdate(dns_client_t *client, dns_rdataclass_t rdclass,
return (result);
}
isc_refcount_decrement(&client->references);
isc_refcount_decrement1(&client->references);
*transp = NULL;
fail:
......
......@@ -1046,9 +1046,7 @@ free_rbtdb(dns_rbtdb_t *rbtdb, bool log, isc_event_t *event) {
REQUIRE(rbtdb->future_version == NULL);
if (rbtdb->current_version != NULL) {
INSIST(isc_refcount_decrement(
&rbtdb->current_version->references) == 1);
isc_refcount_decrementz(&rbtdb->current_version->references);
UNLINK(rbtdb->open_versions, rbtdb->current_version, link);
isc_rwlock_destroy(&rbtdb->current_version->glue_rwlock);
isc_refcount_destroy(&rbtdb->current_version->references);
......@@ -8703,7 +8701,7 @@ dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
rbtdb->next_serial = 2;
rbtdb->current_version = allocate_version(mctx, 1, 1, false);
if (rbtdb->current_version == NULL) {
isc_refcount_decrement(&rbtdb->references);
isc_refcount_decrementz(&rbtdb->references);
free_rbtdb(rbtdb, false, NULL);
return (ISC_R_NOMEMORY);
}
......@@ -8724,7 +8722,7 @@ dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type,
isc_mem_put(mctx, rbtdb->current_version,
sizeof(*rbtdb->current_version));
rbtdb->current_version = NULL;
isc_refcount_decrement(&rbtdb->references);
isc_refcount_decrementz(&rbtdb->references);
free_rbtdb(rbtdb, false, NULL);
return (result);
}
......
......@@ -4487,7 +4487,7 @@ fctx_unlink(fetchctx_t *fctx) {
ISC_LIST_UNLINK(res->buckets[bucketnum].fctxs, fctx, link);
REQUIRE(atomic_fetch_sub_release(&res->nfctx, 1) > 0);
INSIST(atomic_fetch_sub_release(&res->nfctx, 1) > 0);
dec_stats(res, dns_resstatscounter_nfetch);
......@@ -5185,7 +5185,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
ISC_LIST_APPEND(res->buckets[bucketnum].fctxs, fctx, link);
REQUIRE(atomic_fetch_add_relaxed(&res->nfctx, 1) < UINT32_MAX);
INSIST(atomic_fetch_add_relaxed(&res->nfctx, 1) < UINT32_MAX);
inc_stats(res, dns_resstatscounter_nfetch);
......
......@@ -1502,9 +1502,9 @@ cleanup_task:
dns_rbt_destroy(&zones->rbt);
cleanup_rbt:
isc_refcount_decrement(&zones->irefs);
isc_refcount_decrementz(&zones->irefs);
isc_refcount_destroy(&zones->irefs);
isc_refcount_decrement(&zones->refs);
isc_refcount_decrementz(&zones->refs);
isc_refcount_destroy(&zones->refs);
isc_mutex_destroy(&zones->maint_lock);
......@@ -1587,7 +1587,7 @@ cleanup_ht:
isc_timer_detach(&zone->updatetimer);
cleanup_timer:
isc_refcount_decrement(&zone->refs);
isc_refcount_decrementz(&zone->refs);
isc_refcount_destroy(&zone->refs);
isc_mem_put(rpzs->mctx, zone, sizeof(*zone));
......
......@@ -638,7 +638,7 @@ getnodedata(dns_db_t *db, const dns_name_t *name, bool create,
}
if (result != ISC_R_SUCCESS) {
isc_refcount_decrement(&node->references);
isc_refcount_decrementz(&node->references);
destroynode(node);
return (result);
}
......@@ -650,7 +650,7 @@ getnodedata(dns_db_t *db, const dns_name_t *name, bool create,
sdlz->dbdata, node);
MAYBE_UNLOCK(sdlz->dlzimp);
if (result != ISC_R_SUCCESS && result != ISC_R_NOTIMPLEMENTED) {
isc_refcount_decrement(&node->references);
isc_refcount_decrementz(&node->references);
destroynode(node);
return (result);
}
......@@ -1299,7 +1299,7 @@ dbiterator_destroy(dns_dbiterator_t **iteratorp) {
dns_sdlznode_t *node;
node = ISC_LIST_HEAD(sdlziter->nodelist);
ISC_LIST_UNLINK(sdlziter->nodelist, node, link);
isc_refcount_decrement(&node->references);
isc_refcount_decrementz(&node->references);
destroynode(node);
}
......
......@@ -349,7 +349,7 @@ dns_tsigkey_createfromkey(const dns_name_t *name, const dns_name_t *algorithm,
cleanup_refs:
tkey->magic = 0;
while (refs-- > 0) {
isc_refcount_decrement(&tkey->refs);
isc_refcount_decrement0(&tkey->refs);
}
isc_refcount_destroy(&tkey->refs);
......
......@@ -314,10 +314,10 @@ cleanup_dynkeys:
}
cleanup_weakrefs:
isc_refcount_decrement(&view->weakrefs);
isc_refcount_decrementz(&view->weakrefs);
isc_refcount_destroy(&view->weakrefs);
isc_refcount_decrement(&view->references);
isc_refcount_decrementz(&view->references);
isc_refcount_destroy(&view->references);
if (view->fwdtable != NULL) {
......
......@@ -1146,7 +1146,7 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
return (ISC_R_SUCCESS);
free_refs:
isc_refcount_decrement(&zone->erefs);
isc_refcount_decrement0(&zone->erefs);
isc_refcount_destroy(&zone->erefs);
isc_refcount_destroy(&zone->irefs);
......
......@@ -375,8 +375,8 @@ asyncload(dns_zone_t *zone, void *zt_) {
* Caller is holding a reference to zt->loads_pending
* and zt->references so these can't decrement to zero.
*/
INSIST(isc_refcount_decrement(&zt->loads_pending) > 1);
INSIST(isc_refcount_decrement(&zt->references) > 1);
isc_refcount_decrement1(&zt->references);
isc_refcount_decrement1(&zt->loads_pending);
}
return (ISC_R_SUCCESS);
}
......
......@@ -236,7 +236,7 @@ isc_httpdmgr_create(isc_nm_t *nm, isc_mem_t *mctx, isc_sockaddr_t *addr,
cleanup:
httpdmgr->magic = 0;
isc_refcount_decrement(&httpdmgr->references);
isc_refcount_decrementz(&httpdmgr->references);
isc_refcount_destroy(&httpdmgr->references);
isc_mem_detach(&httpdmgr->mctx);
isc_mutex_destroy(&httpdmgr->lock);
......
......@@ -133,4 +133,22 @@ isc_refcount_decrement(isc_refcount_t *target) {
})
#endif /* _MSC_VER */
#define isc_refcount_decrementz(target) \
do { \
uint_fast32_t _refs = isc_refcount_decrement(target); \
ISC_INSIST(_refs == 1); \
} while (0)
#define isc_refcount_decrement1(target) \
do { \
uint_fast32_t _refs = isc_refcount_decrement(target); \
ISC_INSIST(_refs > 1); \
} while (0)
#define isc_refcount_decrement0(target) \
do { \
uint_fast32_t _refs = isc_refcount_decrement(target); \
ISC_INSIST(_refs > 0); \
} while (0)
ISC_LANG_ENDDECLS
......@@ -1102,13 +1102,67 @@ greatest_version(isc_logfile_t *file, int versions, int *greatestp) {
return (ISC_R_SUCCESS);
}
static void
insert_sort(int64_t to_keep[], int64_t versions, int version) {
int i = 0;
while (i < versions && version < to_keep[i]) {
i++;
}
if (i == versions) {
return;
}
if (i < versions - 1) {
memmove(&to_keep[i + 1], &to_keep[i],
sizeof(to_keep[0]) * (versions - i - 1));
}
to_keep[i] = version;
}
static int64_t
last_to_keep(int64_t versions, isc_dir_t *dirp, char *bname, size_t bnamelen) {
if (versions <= 0) {
return INT64_MAX;
}
int64_t to_keep[ISC_LOG_MAX_VERSIONS] = { 0 };
int64_t version = 0;
if (versions > ISC_LOG_MAX_VERSIONS) {
versions = ISC_LOG_MAX_VERSIONS;
}
/*
* First we fill 'to_keep' structure using insertion sort
*/
memset(to_keep, 0, sizeof(to_keep));
while (isc_dir_read(dirp) == ISC_R_SUCCESS) {
if (dirp->entry.length <= bnamelen ||
strncmp(dirp->entry.name, bname, bnamelen) != 0 ||
dirp->entry.name[bnamelen] != '.')
{
continue;
}
char *digit_end;
char *ename = &dirp->entry.name[bnamelen + 1];
version = strtoull(ename, &digit_end, 10);
if (*digit_end == '\0') {
insert_sort(to_keep, versions, version);
}
}
isc_dir_reset(dirp);
/*
* to_keep[versions - 1] is the last one we want to keep
*/
return (to_keep[versions - 1]);
}
static isc_result_t
remove_old_tsversions(isc_logfile_t *file, int versions) {
isc_result_t result;
char *bname, *digit_end;
const char *dirname;
int64_t version, last = INT64_MAX;
int64_t to_keep[ISC_LOG_MAX_VERSIONS];
size_t bnamelen;
isc_dir_t dir;
char sep = '/';
......@@ -1155,45 +1209,7 @@ remove_old_tsversions(isc_logfile_t *file, int versions) {
return (result);
}
if (versions > 0) {
if (versions > ISC_LOG_MAX_VERSIONS) {
versions = ISC_LOG_MAX_VERSIONS;
}
/*
* First we fill 'to_keep' structure using insertion sort
*/
memset(to_keep, 0, sizeof(to_keep));
while (isc_dir_read(&dir) == ISC_R_SUCCESS) {
if (dir.entry.length > bnamelen &&
strncmp(dir.entry.name, bname, bnamelen) == 0 &&
dir.entry.name[bnamelen] == '.')
{
char *ename = &dir.entry.name[bnamelen + 1];
version = strtoull(ename, &digit_end, 10);
if (*digit_end == '\0') {
int i = 0;
while (i < versions &&
version < to_keep[i]) {
i++;
}
if (i < versions) {
memmove(&to_keep[i + 1],
&to_keep[i],
sizeof(to_keep[0]) *
(versions - i -
1));
to_keep[i] = version;
}
}
}
}
/*
* to_keep[versions - 1] is the last one we want to keep
*/
last = to_keep[versions - 1];
isc_dir_reset(&dir);
}
last = last_to_keep(versions, &dir, bname, bnamelen);
/*
* Then we remove all files that we don't want to_keep
......
......@@ -1015,7 +1015,7 @@ isc_mem_destroy(isc_mem_t **ctxp) {
print_active(ctx, stderr);
}
#else /* if ISC_MEM_TRACKLINES */
isc_refcount_decrement(&ctx->references);
isc_refcount_decrementz(&ctx->references);
#endif /* if ISC_MEM_TRACKLINES */
isc_refcount_destroy(&ctx->references);
destroy(ctx);
......
......@@ -2999,7 +2999,7 @@ internal_accept(isc__socket_t *sock) {
inc_stats(manager->stats, sock->statsindex[STATID_ACCEPT]);
} else {
inc_stats(manager->stats, sock->statsindex[STATID_ACCEPTFAIL]);
(void)isc_refcount_decrement(&NEWCONNSOCK(dev)->references);
isc_refcount_decrementz(&NEWCONNSOCK(dev)->references);
free_socket((isc__socket_t **)&dev->newsocket);
}
......@@ -5081,7 +5081,7 @@ isc_socket_cancel(isc_socket_t *sock0, isc_task_t *task, unsigned int how) {
ISC_LIST_UNLINK(sock->accept_list, dev,
ev_link);
(void)isc_refcount_decrement(
isc_refcount_decrementz(
&NEWCONNSOCK(dev)->references);
free_socket((isc__socket_t **)&dev->newsocket);
......
......@@ -2488,7 +2488,7 @@ SocketIoThread(LPVOID ThreadContext) {
closesocket(lpo->adev->newsocket->fd);
lpo->adev->newsocket->fd =
INVALID_SOCKET;
isc_refcount_decrement(
isc_refcount_decrementz(
&lpo->adev->newsocket
->references);
free_socket(&lpo->adev->newsocket,
......@@ -3501,7 +3501,7 @@ isc_socket_cancel(isc_socket_t *sock, isc_task_t *task, unsigned int how) {
next = ISC_LIST_NEXT(dev, ev_link);
if ((task == NULL) || (task == current_task)) {
isc_refcount_decrement(
isc_refcount_decrementz(
&dev->newsocket->references);
closesocket(dev->newsocket->fd);
dev->newsocket->fd = INVALID_SOCKET;
......
......@@ -2653,7 +2653,7 @@ exit 0;
# --enable-openssl-hash supported
# --enable-threads included without a way to disable it
# --enable-backtrace backtrace included without a way to disable it
# --enable-symtable incompatible with DLLs (or libtool)
# --enable-symtable incompatible with DLLs
# --enable-ipv6 included without a way to disable it
# --enable-atomic supported (renamed to intrinsic)
# --enable-fixed-rrset supported
......@@ -2675,7 +2675,6 @@ exit 0;
# --with-zlib supported
# --with-purify not supported (package available on WIN32 but for free?)
# --with-gperftools-profiler not supported (package not available on WIN32)
# --with-libtool not supported on WIN32 (never)
# --with-locktype not supported on WIN32 (not yet available on WIN32)
# --with-readline supported
# --with-protobuf-c not supported (no reason to until libfstrm is ready)
......