Revert "dirmngr: hkp: Avoid potential race condition when some hosts die."
authorNIIBE Yutaka <gniibe@fsij.org>
Tue, 11 Sep 2018 05:04:37 +0000 (14:04 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Tue, 11 Sep 2018 05:04:37 +0000 (14:04 +0900)
This reverts commit 04b56eff118ec34432c368b87e724bce1ac683f9.

--

Now the access to hosttable is serialized correctly.

dirmngr/ks-engine-hkp.c

index 9c234ec..31fa772 100644 (file)
@@ -224,26 +224,29 @@ host_in_pool_p (hostinfo_t hi, int tblidx)
 static int
 select_random_host (hostinfo_t hi)
 {
-  int *tbl = NULL;
-  size_t tblsize = 0;
+  int *tbl;
+  size_t tblsize;
   int pidx, idx;
 
   /* We create a new table so that we randomly select only from
      currently alive hosts.  */
-  for (idx = 0;
+  for (idx = 0, tblsize = 0;
        idx < hi->pool_len && (pidx = hi->pool[idx]) != -1;
        idx++)
     if (hosttable[pidx] && !hosttable[pidx]->dead)
-      {
-        tblsize++;
-        tbl = xtryrealloc(tbl, tblsize * sizeof *tbl);
-        if (!tbl)
-          return -1; /* memory allocation failed! */
-        tbl[tblsize-1] = pidx;
-      }
+      tblsize++;
   if (!tblsize)
     return -1; /* No hosts.  */
 
+  tbl = xtrymalloc (tblsize * sizeof *tbl);
+  if (!tbl)
+    return -1;
+  for (idx = 0, tblsize = 0;
+       idx < hi->pool_len && (pidx = hi->pool[idx]) != -1;
+       idx++)
+    if (hosttable[pidx] && !hosttable[pidx]->dead)
+      tbl[tblsize++] = pidx;
+
   if (tblsize == 1)  /* Save a get_uint_nonce.  */
     pidx = tbl[0];
   else