Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F18825870
D396.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
5 KB
Subscribers
None
D396.diff
View Options
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
Details
Attached
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
Attached To
D396: 910_0143-dimrngr-Avoid-need-for-hkp-housekeeping.patch
Event Timeline
Log In to Comment