chiark / gitweb /
@@ -1,3 +1,14 @@
authorian <ian>
Wed, 9 Aug 2006 11:16:59 +0000 (11:16 +0000)
committerian <ian>
Wed, 9 Aug 2006 11:16:59 +0000 (11:16 +0000)
+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:

changelog
src/adns.h
src/types.c

index 693120e05d4157bc734924c24d3b74bd4985b3eb..751f0ed132c995f2faf52a3b1a9492321f212562 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,14 @@
+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:
index 7187ccefce34ca66832b8862ad3a2e000ae3c4d7..34f9f4978020f9f4b80c85406a0e6b0cdceb1a92 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * adns.h
- * - adns user-visible API (single-threaded, without any locking)
+ * - adns user-visible API
  */
 /*
  *
@@ -52,7 +52,7 @@
  *  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
@@ -401,6 +401,18 @@ typedef struct {
  *  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*/);
 
index b369322d778c071594d972d8706d905a1c2641d9..36ff87930a06f176652419f3aee5e8914465d941 100644 (file)
@@ -320,7 +320,7 @@ static int div_addr(void *context, const void *datap_a, const void *datap_b) {
 
 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:
@@ -736,7 +736,7 @@ static void icb_ptr(adns_query parent, adns_query child) {
 
 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;