+adns (1.3.0.99.1); urgency=low
+
+ Improvements for multithreaded programs:
+ * New documentation comment in adns.h explaining thread guarantees
+ (or lack of them), replaces `single-threaded' note at the top.
+ * Fix string conversion of adns_r_addr not to use a static buffer
+ (function csp_addr) so as to make thread promise true.
+ * Make an internal variable const-correct (expectdomain in pa_ptr).
+
+ --
+
adns (1.3); urgency=low
Portability fixes:
/*
* adns.h
- * - adns user-visible API (single-threaded, without any locking)
+ * - adns user-visible API
*/
/*
*
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*
- * $Id: adns.h,v 1.95 2006/04/08 14:36:57 ian Exp $
+ * $Id: adns.h,v 1.96 2006/08/09 11:16:59 ian Exp $
*/
#ifndef ADNS_H_INCLUDED
* requested.
*/
+/* Threads:
+ * adns does not use any static modifiable state, so it
+ * is safe to call adns_init several times and then use the
+ * resulting adns_states concurrently.
+ * However, it is NOT safe to make simultaneous calls into
+ * adns using the same adns_state; a single adns_state must be used
+ * only by one thread at a time. You can solve this problem by
+ * having one adns_state per thread, or if that isn't feasible, you
+ * could maintain a pool of adns_states. Unfortunately neither of
+ * these approaches has optimal performance.
+ */
+
int adns_init(adns_state *newstate_r, adns_initflags flags,
FILE *diagfile /*0=>stderr*/);
static adns_status csp_addr(vbuf *vb, const adns_rr_addr *rrp) {
const char *ia;
- static char buf[30];
+ char buf[30];
switch (rrp->addr.inet.sin_family) {
case AF_INET:
static adns_status pa_ptr(const parseinfo *pai, int dmstart,
int max, void *datap) {
- static const char *(expectdomain[])= { DNS_INADDR_ARPA };
+ static const char *const (expectdomain[])= { DNS_INADDR_ARPA };
char **rrp= datap;
adns_status st;