Page MenuHome GnuPG

D396.diff
No OneTemporary

D396.diff

Index: b/dirmngr/dirmngr.h
===================================================================
--- b/dirmngr/dirmngr.h
+++ b/dirmngr/dirmngr.h
@@ -186,10 +186,6 @@
const char* dirmngr_get_current_socket_name (void);
-/*-- Various housekeeping functions. --*/
-void ks_hkp_housekeeping (time_t curtime);
-
-
/*-- server.c --*/
ldap_server_t get_ldapservers_from_ctrl (ctrl_t ctrl);
ksba_cert_t get_cert_local (ctrl_t ctrl, const char *issuer);
Index: b/dirmngr/dirmngr.c
===================================================================
--- b/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -1751,11 +1751,9 @@
housekeeping_thread (void *arg)
{
static int sentinel;
- time_t curtime;
(void)arg;
- curtime = gnupg_get_time ();
if (sentinel)
{
log_info ("housekeeping is already going on\n");
@@ -1765,8 +1763,6 @@
if (opt.verbose > 1)
log_info ("starting housekeeping\n");
- ks_hkp_housekeeping (curtime);
-
if (opt.verbose > 1)
log_info ("ready with housekeeping\n");
sentinel--;
Index: b/dirmngr/ks-engine-hkp.c
===================================================================
--- b/dirmngr/ks-engine-hkp.c
+++ b/dirmngr/ks-engine-hkp.c
@@ -203,6 +203,25 @@
}
+static int
+host_is_alive (hostinfo_t hi, time_t curtime)
+{
+ if (!hi)
+ return 0;
+ if (!hi->dead)
+ return 1;
+ if (!hi->died_at)
+ return 0; /* manually marked dead */
+ if (hi->died_at + RESURRECT_INTERVAL <= curtime
+ || hi->died_at > curtime)
+ {
+ hi->dead = 0;
+ log_info ("resurrected host '%s'", hi->name);
+ return 1;
+ }
+ return 0;
+}
+
/* Select a random host. Consult TABLE which indices into the global
hosttable. Returns index into TABLE or -1 if no host could be
selected. */
@@ -212,11 +231,13 @@
int *tbl = NULL;
size_t tblsize = 0;
int pidx, idx;
+ time_t curtime;
+ curtime = gnupg_get_time ();
/* We create a new table so that we randomly select only from
currently alive hosts. */
for (idx=0; (pidx = table[idx]) != -1; idx++)
- if (hosttable[pidx] && !hosttable[pidx]->dead)
+ if (hosttable[pidx] && host_is_alive (hosttable[pidx], curtime))
{
tblsize++;
tbl = xtryrealloc(tbl, tblsize * sizeof *tbl);
@@ -392,6 +413,7 @@
gpg_error_t err = 0;
hostinfo_t hi;
int idx;
+ time_t curtime;
*r_host = NULL;
if (r_httpflags)
@@ -543,6 +565,7 @@
xfree (reftbl);
}
+ curtime = gnupg_get_time ();
hi = hosttable[idx];
if (hi->pool)
{
@@ -559,7 +582,7 @@
if (force_reselect)
hi->poolidx = -1;
else if (hi->poolidx >= 0 && hi->poolidx < hosttable_size
- && hosttable[hi->poolidx] && hosttable[hi->poolidx]->dead)
+ && hosttable[hi->poolidx] && !host_is_alive (hosttable[hi->poolidx], curtime))
hi->poolidx = -1;
/* Select a host if needed. */
@@ -583,7 +606,7 @@
assert (hi);
}
- if (hi->dead)
+ if (!host_is_alive (hi, curtime))
{
log_error ("host '%s' marked as dead\n", hi->name);
if (r_poolname)
@@ -688,7 +711,8 @@
{
gpg_error_t err = 0;
hostinfo_t hi, hi2;
- int idx, idx2, idx3, n;
+ int idx, idx2, idx3, n, is_alive;
+ time_t curtime;
if (!name || !*name || !strcmp (name, "localhost"))
return 0;
@@ -697,13 +721,15 @@
if (idx == -1)
return gpg_error (GPG_ERR_NOT_FOUND);
+ curtime = gnupg_get_time ();
hi = hosttable[idx];
- if (alive && hi->dead)
+ is_alive = host_is_alive (hi, curtime);
+ if (alive && !is_alive)
{
hi->dead = 0;
err = ks_printf_help (ctrl, "marking '%s' as alive", name);
}
- else if (!alive && !hi->dead)
+ else if (!alive && is_alive)
{
hi->dead = 1;
hi->died_at = 0; /* Manually set dead. */
@@ -735,14 +761,15 @@
hi2 = hosttable[n];
if (!hi2)
- ;
- else if (alive && hi2->dead)
+ continue;
+ is_alive = host_is_alive (hi2, curtime);
+ if (alive && !is_alive)
{
hi2->dead = 0;
err = ks_printf_help (ctrl, "marking '%s' as alive",
hi2->name);
}
- else if (!alive && !hi2->dead)
+ else if (!alive && is_alive)
{
hi2->dead = 1;
hi2->died_at = 0; /* Manually set dead. */
@@ -944,34 +971,6 @@
}
-/* Housekeeping function called from the housekeeping thread. It is
- used to mark dead hosts alive so that they may be tried again after
- some time. */
-void
-ks_hkp_housekeeping (time_t curtime)
-{
- int idx;
- hostinfo_t hi;
-
- for (idx=0; idx < hosttable_size; idx++)
- {
- hi = hosttable[idx];
- if (!hi)
- continue;
- if (!hi->dead)
- continue;
- if (!hi->died_at)
- continue; /* Do not resurrect manually shot hosts. */
- if (hi->died_at + RESURRECT_INTERVAL <= curtime
- || hi->died_at > curtime)
- {
- hi->dead = 0;
- log_info ("resurrected host '%s'", hi->name);
- }
- }
-}
-
-
/* Send an HTTP request. On success returns an estream object at
R_FP. HOSTPORTSTR is only used for diagnostics. If HTTPHOST is
not NULL it will be used as HTTP "Host" header. If POST_CB is not

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 22, 3:31 PM (1 h, 1 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
43/b6/5c28e127c140a19227ac89499c20

Event Timeline