summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/htsback.c25
-rw-r--r--src/htslib.c2
-rw-r--r--src/htsparse.c5
3 files changed, 27 insertions, 5 deletions
diff --git a/src/htsback.c b/src/htsback.c
index 745a80c..4de49dc 100644
--- a/src/htsback.c
+++ b/src/htsback.c
@@ -1060,9 +1060,12 @@ int back_maydelete(httrackp * opt, cache_back * cache, struct_back * sback,
lien_back tmp;
strcpybuff(tmp.url_adr, back[p].url_adr);
+ tmp.ka_time_start = back[p].ka_time_start;
if (back_letlive(opt, cache, sback, p)) {
strcpybuff(back[p].url_adr, tmp.url_adr);
+ back[p].ka_time_start = tmp.ka_time_start;
back[p].status = STATUS_ALIVE; // alive & waiting
+ assert(back[p].ka_time_start != 0);
hts_log_print(opt, LOG_DEBUG,
"(Keep-Alive): successfully saved #%d (%s)",
back[p].r.debugid, back[p].url_adr);
@@ -1108,12 +1111,15 @@ void back_maydeletehttp(httrackp * opt, cache_back * cache, struct_back * sback,
lien_back tmp;
strcpybuff(tmp.url_adr, back[p].url_adr);
+ tmp.ka_time_start = back[p].ka_time_start;
deletehttp(&back[q].r); // security check
back_connxfr(&back[p].r, &back[q].r); // transfer live connection settings from p to q
back[q].ka_time_start = back[p].ka_time_start; // refresh
back[p].r.soc = INVALID_SOCKET;
strcpybuff(back[q].url_adr, tmp.url_adr); // address
+ back[q].ka_time_start = tmp.ka_time_start;
back[q].status = STATUS_ALIVE; // alive & waiting
+ assert(back[q].ka_time_start != 0);
hts_log_print(opt, LOG_DEBUG,
"(Keep-Alive): successfully preserved #%d (%s)",
back[q].r.debugid, back[q].url_adr);
@@ -1137,6 +1143,7 @@ int back_trylive(httrackp * opt, cache_back * cache, struct_back * sback,
if (i >= 0 && i != p) {
deletehttp(&back[p].r); // security check
back_connxfr(&back[i].r, &back[p].r); // transfer live connection settings from i to p
+ back[p].ka_time_start = back[i].ka_time_start;
back_delete(opt, cache, sback, i); // delete old slot
back[p].status = STATUS_CONNECTING; // ready to connect
return 1; // success: will reuse live connection
@@ -2383,9 +2390,23 @@ void back_clean(httrackp * opt, cache_back * cache, struct_back * sback) {
if (!back[i].r.keep_alive || back[i].r.soc == INVALID_SOCKET
|| back[i].r.keep_alive_max < 1
|| time_local() >= back[i].ka_time_start + back[i].r.keep_alive_t) {
+ const char *reason = "unknown";
+ char buffer[128];
+ if (!back[i].r.keep_alive) {
+ reason = "not keep-alive";
+ } else if (back[i].r.soc == INVALID_SOCKET) {
+ reason = "closed";
+ } else if (back[i].r.keep_alive_max < 1) {
+ reason = "keep-alive-max reached";
+ } else if (time_local() >= back[i].ka_time_start + back[i].r.keep_alive_t) {
+ assert(back[i].ka_time_start != 0);
+ snprintf(buffer, sizeof(buffer), "keep-alive timeout = %ds)",
+ (int) back[i].r.keep_alive_t);
+ reason = buffer;
+ }
hts_log_print(opt, LOG_DEBUG,
- "(Keep-Alive): live socket closed #%d (%s)",
- back[i].r.debugid, back[i].url_adr);
+ "(Keep-Alive): live socket #%d (%s) closed (%s)",
+ back[i].r.debugid, back[i].url_adr, reason);
back_delete(opt, cache, sback, i); // delete backing entry
}
}
diff --git a/src/htslib.c b/src/htslib.c
index d57b120..9a48b62 100644
--- a/src/htslib.c
+++ b/src/htslib.c
@@ -1441,7 +1441,7 @@ void treathead(t_cookie * cookie, char *adr, char *fil, htsblk * retour,
p += strlen("max=");
sscanf(p, "%d", &retour->keep_alive_max);
}
- if (retour->keep_alive_max <= 1 || retour->keep_alive_t < 3) {
+ if (retour->keep_alive_max <= 1 || retour->keep_alive_t < 1) {
retour->keep_alive = 0;
}
}
diff --git a/src/htsparse.c b/src/htsparse.c
index fd60a1e..02e4e3a 100644
--- a/src/htsparse.c
+++ b/src/htsparse.c
@@ -4652,7 +4652,7 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
/* We added the link before the parser recorded it -- the background download MUST NOT clean silently this entry! (Petr Gajdusek) */
back[b].early_add = 1;
- /* Cache read failed because file does not exists (bad delayed name!)
+ /* Cache read failed because file does not exist (bad delayed name!)
Just re-add with the correct name, as we know the MIME now!
*/
if (back[b].r.statuscode == STATUSCODE_INVALID && back[b].r.adr == NULL) {
@@ -4664,7 +4664,8 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
back_copy_static(&back[b], &delayed_back);
/* Delete entry */
- back_delete(opt, cache, sback, b); // cancel
+ back[b].r.statuscode = 0; /* TEMPORARY INVESTIGATE WHY WE FETCHED A SOCKET HERE */
+ back_maydelete(opt, cache, sback, b); // cancel
b = -1;
/* Recompute filename with MIME type */