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) {
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
}
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);
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;
- #ifdef ISC_PLATFORM_USETHREADS
+ LOCK(&manager->lock);
+ #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;
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));
isc_mem_attach(mctx, &manager->mctx);
- #ifdef ISC_PLATFORM_USETHREADS
+ #ifdef USE_WORKER_THREADS
- LOCK(&manager->lock);
/*
* Start workers.
*/
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);
*/
#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