From 69bab1cba07a8259b85a7911c2824724667803a4 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 11 Sep 2018 14:04:37 +0900 Subject: [PATCH] Revert "dirmngr: hkp: Avoid potential race condition when some hosts die." This reverts commit 04b56eff118ec34432c368b87e724bce1ac683f9. -- Now the access to hosttable is serialized correctly. --- dirmngr/ks-engine-hkp.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c index 9c234ec44..31fa77284 100644 --- a/dirmngr/ks-engine-hkp.c +++ b/dirmngr/ks-engine-hkp.c @@ -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