Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34252319
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
Tue, Dec 23, 10:47 PM (16 h, 23 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
80/21/6efcafca102a44069a73913f56c9
Attached To
D396: 910_0143-dimrngr-Avoid-need-for-hkp-housekeeping.patch
Event Timeline
Log In to Comment