From: Dave Hart Date: Sat, 2 Jun 2012 14:03:53 +0000 (+0000) Subject: Merge dlh-7551.ad.hartbrothers.com:C:/ntp/ntp-dev-libisc-upstream X-Git-Tag: NTP_4_2_7P278~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0b6c4dd7dad5b4d20207383fd4e0a7828d62802;p=thirdparty%2Fntp.git Merge dlh-7551.ad.hartbrothers.com:C:/ntp/ntp-dev-libisc-upstream into dlh-7551.ad.hartbrothers.com:C:/ntp/ntp-dev-2204 bk: 4fca1d49UOjyebrMUYTMAzBNyT0w5g --- c0b6c4dd7dad5b4d20207383fd4e0a7828d62802 diff --cc lib/isc/assertions.c index 8db4cdef8,31c4fe7c9..bde4e88dc --- a/lib/isc/assertions.c +++ b/lib/isc/assertions.c @@@ -30,11 -39,11 +39,12 @@@ /*% * Forward. */ - /* coverity[+kill] */ static void -default_callback(const char *, int, isc_assertiontype_t, const char *); +default_callback(const char *, int, isc_assertiontype_t, const char *) + __attribute__ ((__noreturn__)); + static isc_assertioncallback_t isc_assertion_failed_cb = default_callback; + /*% * Public. */ diff --cc lib/isc/include/isc/assertions.h index adc083f32,2c81b1ae9..c30282ac0 --- a/lib/isc/include/isc/assertions.h +++ b/lib/isc/include/isc/assertions.h @@@ -57,11 -38,12 +57,13 @@@ typedef enum } isc_assertiontype_t; typedef void (*isc_assertioncallback_t)(const char *, int, isc_assertiontype_t, - const char *); + const char *) + __attribute__ ((__noreturn__)); /* coverity[+kill] */ - LIBISC_EXTERNAL_DATA extern isc_assertioncallback_t isc_assertion_failed; + ISC_PLATFORM_NORETURN_PRE + void isc_assertion_failed(const char *, int, isc_assertiontype_t, + const char *) ISC_PLATFORM_NORETURN_POST; void isc_assertion_setcallback(isc_assertioncallback_t); diff --cc lib/isc/netaddr.c index 3da51182d,5cce1bc1a..d6928c10d --- a/lib/isc/netaddr.c +++ b/lib/isc/netaddr.c @@@ -212,8 -212,8 +213,8 @@@ isc_netaddr_format(const isc_netaddr_t isc_result_t isc_netaddr_prefixok(const isc_netaddr_t *na, unsigned int prefixlen) { - static const unsigned char zeros[16]; + static const unsigned char zeros[16] = { 0 }; - unsigned int nbits, nbytes, ipbytes; + unsigned int nbits, nbytes, ipbytes = 0; const unsigned char *p; switch (na->family) { @@@ -304,18 -301,18 +302,18 @@@ isc_netaddr_fromin6(isc_netaddr_t *neta isc_result_t isc_netaddr_frompath(isc_netaddr_t *netaddr, const char *path) { #ifdef ISC_PLATFORM_HAVESYSUNH - if (strlen(path) > sizeof(netaddr->type.un) - 1) - return (ISC_R_NOSPACE); + if (strlen(path) > sizeof(netaddr->type.un) - 1) + return (ISC_R_NOSPACE); - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_UNIX; - strcpy(netaddr->type.un, path); - netaddr->zone = 0; - return (ISC_R_SUCCESS); -#else + memset(netaddr, 0, sizeof(*netaddr)); + netaddr->family = AF_UNIX; + strlcpy(netaddr->type.un, path, sizeof(netaddr->type.un)); + netaddr->zone = 0; + return (ISC_R_SUCCESS); +#else UNUSED(netaddr); UNUSED(path); - return (ISC_R_NOTIMPLEMENTED); + return (ISC_R_NOTIMPLEMENTED); #endif } diff --cc lib/isc/task.c index 0bd631bdc,227b29596..6c572f1ee --- a/lib/isc/task.c +++ b/lib/isc/task.c @@@ -205,8 -358,7 +360,9 @@@ isc__task_create(isc_taskmgr_t *manager task->tag = NULL; INIT_LINK(task, link); INIT_LINK(task, ready_link); + INIT_LINK(task, ready_priority_link); + UNLOCK(&task->lock); + UNLOCK(&manager->lock); exiting = ISC_FALSE; LOCK(&manager->lock); @@@ -1011,31 -1281,39 +1285,41 @@@ run(void *uap) XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_EXITING, "exiting")); + #ifdef OPENSSL_LEAKS + ERR_remove_state(0); + #endif + return ((isc_threadresult_t)0); } - #endif /* ISC_PLATFORM_USETHREADS */ + #endif /* USE_WORKER_THREADS */ static void - manager_free(isc_taskmgr_t *manager) { + manager_free(isc__taskmgr_t *manager) { isc_mem_t *mctx; + LOCK(&manager->lock); - #ifdef ISC_PLATFORM_USETHREADS + #ifdef USE_WORKER_THREADS (void)isc_condition_destroy(&manager->exclusive_granted); (void)isc_condition_destroy(&manager->work_available); + (void)isc_condition_destroy(&manager->paused); isc_mem_free(manager->mctx, manager->threads); - #endif /* ISC_PLATFORM_USETHREADS */ - manager->magic = 0; + #endif /* USE_WORKER_THREADS */ - DESTROYLOCK(&manager->lock); + manager->common.impmagic = 0; + manager->common.magic = 0; mctx = manager->mctx; + UNLOCK(&manager->lock); + DESTROYLOCK(&manager->lock); isc_mem_put(mctx, manager, sizeof(*manager)); isc_mem_detach(&mctx); + + #ifdef USE_SHARED_MANAGER + taskmgr = NULL; + #endif /* USE_SHARED_MANAGER */ } - isc_result_t - isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers, - unsigned int default_quantum, isc_taskmgr_t **managerp) + ISC_TASKFUNC_SCOPE isc_result_t + isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers, + unsigned int default_quantum, isc_taskmgr_t **managerp) { isc_result_t result; unsigned int i, started = 0; @@@ -1066,11 -1352,8 +1358,11 @@@ result = isc_mutex_init(&manager->lock); if (result != ISC_R_SUCCESS) goto cleanup_mgr; + LOCK(&manager->lock); + manager->magic = TASK_MANAGER_MAGIC; + manager->mctx = NULL; - #ifdef ISC_PLATFORM_USETHREADS + #ifdef USE_WORKER_THREADS manager->workers = 0; manager->threads = isc_mem_allocate(mctx, workers * sizeof(isc_thread_t)); @@@ -1106,7 -1399,8 +1408,7 @@@ isc_mem_attach(mctx, &manager->mctx); - #ifdef ISC_PLATFORM_USETHREADS + #ifdef USE_WORKER_THREADS - LOCK(&manager->lock); /* * Start workers. */ @@@ -1125,13 -1419,13 +1427,14 @@@ return (ISC_R_NOTHREADS); } isc_thread_setconcurrency(workers); - #else /* ISC_PLATFORM_USETHREADS */ + #endif /* USE_WORKER_THREADS */ + #ifdef USE_SHARED_MANAGER manager->refs = 1; + UNLOCK(&manager->lock); taskmgr = manager; - #endif /* ISC_PLATFORM_USETHREADS */ + #endif /* USE_SHARED_MANAGER */ - *managerp = manager; + *managerp = (isc_taskmgr_t *)manager; return (ISC_R_SUCCESS); diff --cc lib/isc/win32/include/isc/platform.h index 3abe8515a,d632d3cf7..94b8ba508 --- a/lib/isc/win32/include/isc/platform.h +++ b/lib/isc/win32/include/isc/platform.h @@@ -65,23 -63,20 +65,29 @@@ */ #undef ISC_PLATFORM_HAVESYSUNH + /* + * Defines for the noreturn attribute. + */ + #define ISC_PLATFORM_NORETURN_PRE __declspec(noreturn) + #define ISC_PLATFORM_NORETURN_POST + - /* +/* * Set up a macro for importing and exporting from the DLL + * + * To build static libraries on win32, #define ISC_STATIC_WIN */ +#ifndef ISC_STATIC_WIN +#define ISC_DLLEXP __declspec(dllexport) +#define ISC_DLLIMP __declspec(dllimport) +#else +#define ISC_DLLEXP +#define ISC_DLLIMP +#endif #ifdef LIBISC_EXPORTS -#define LIBISC_EXTERNAL_DATA __declspec(dllexport) +#define LIBISC_EXTERNAL_DATA ISC_DLLEXP #else -#define LIBISC_EXTERNAL_DATA __declspec(dllimport) +#define LIBISC_EXTERNAL_DATA ISC_DLLIMP #endif #ifdef LIBISCCFG_EXPORTS diff --cc lib/isc/win32/interfaceiter.c index 0b2269dd0,58ef88363..8753aa8a9 --- a/lib/isc/win32/interfaceiter.c +++ b/lib/isc/win32/interfaceiter.c @@@ -15,9 -15,17 +15,9 @@@ * PERFORMANCE OF THIS SOFTWARE. */ - /* $Id: interfaceiter.c,v 1.13.110.2 2009/01/18 23:47:41 tbox Exp $ */ + /* $Id: interfaceiter.c,v 1.15 2009/01/18 23:48:14 tbox Exp $ */ -/* - * Note that this code will need to be revisited to support IPv6 Interfaces. - * For now we just iterate through IPv4 interfaces. - */ - #include -#include -#include -#include #include #include