+ missing sigwait prototype on BSD/OS 4.0/4.0.1
+ PTHREAD_ONCE_INIT unbraced initializer warnings on Solaris 2.8.
+ IN6ADDR_ANY_INIT unbraced initializer warnings on BSD/OS 4.*, Linux and
Solaris 2.8.
Mostly, several functions that take pointers as arguments, almost
always char * pointers, had those pointers qualified with "const".
Those that returned pointers to previously const-qualified arguments
had their return values qualified as const. Some structure members
were qualified as const to retain that attribute from the variables
from which they were assigned.
The macro DE_CONST was added to isc/util.h to deal with a handful of very
special places where something is qualified as const but really needs to have
its const qualifier removed.
Also cleaned up a few places where variable names clashed with reserved
identifiers. (Which mostly works fine, but strictly speaking is undefined
by the standard.)
Minor other ISC style cleanups.
the logconfig is properly dimensioned, and only free the channellist
memory in isc_logconfig_destroy if the channellist_count is > 0.
the first addresses a problem that could occur when a successful
isc_log_create was followed immediately by isc_log_[v]write[1] or
isc_log_destroy (with no intervening isc_log_usechannel or
isc_logconfig_use), and the second addresses a problem that could
occur in cleanup if isc_log_create or isc_logconfig_create failed.
invariant, causing timer events not to be posted
when due.
Specifically, isc_heap_delete() moved the last element of the heap to
the vacated position and then attempted to restore the heap invariant
by calling sink_down(). This works when the last element has a lower
priority than the one being deleted, and this is often the case
because the last element tends to have a low priority. However, it is
not guaranteed to be the lowest. When deleting an item of a lower
priority than the last item, restoring the invariant requires a call
to float_up(), not sink_down().
isc_heap_delete_now calls either float_up() or sink_down() as needed,
and INSISTs have been added to verify that the heap invariant indeed
holds after the calls.
dns_dispatch_create() no longer exists. dns_dispatch_createtcp()
and dns_dispatch_getudp() are the replacements. _createtcp() takes
a bound, connected TCP socket, while _getudp() will search for
a sharable UDP socket, and if found, attach to it and return a
pointer to it. If one is not found, it will create a udp socket,
bind it to a supplied local address, and create a new dispatcher
around it.
dns_dispatch_remove{request,response}() no longer take the dispatch
as an argument.
query-source can now be set per view.
The dispatch manager holds onto three memory pools, one for
allocating dispatchers from, one for events, and one for
requests/replies. The free list on these pools is hard-coded,
but set to 1024. This keeps us from having to dig into the
isc_mem_t the pools draw from as often.
dns_resolver_create() and dns_view_createresolver() require that
valid dispatchers be passed in; dispatchers are no longer created
for the caller.
Use isc_time_secondsastimet() to set a time_t variable.
Properly skip the duplicate checking loop if the boundary time is not
successfully set (this was intended before, but coded wrongly).
Removed unused variable pid_string, after I opted to not add the
unrequested ISC_LOG_PRINTPID option half way into implementing it.