Module Name: src
Committed By: christos
Date: Fri Dec 29 00:55:46 UTC 2023
Modified Files:
src/external/bsd/fetch/dist/libfetch: common.c
Log Message:
PR/57179: Christof Meerwald: Fix bugs in fetch_cache_{get,put}.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/bsd/fetch/dist/libfetch/common.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/fetch/dist/libfetch/common.c
diff -u src/external/bsd/fetch/dist/libfetch/common.c:1.4 src/external/bsd/fetch/dist/libfetch/common.c:1.5
--- src/external/bsd/fetch/dist/libfetch/common.c:1.4 Tue Jan 24 03:02:57 2023
+++ src/external/bsd/fetch/dist/libfetch/common.c Thu Dec 28 19:55:46 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: common.c,v 1.4 2023/01/24 08:02:57 mlelstv Exp $ */
+/* $NetBSD: common.c,v 1.5 2023/12/29 00:55:46 christos Exp $ */
/*-
* Copyright (c) 1998-2004 Dag-Erling Co�dan Sm�rgrav
* Copyright (c) 2008, 2010 Joerg Sonnenberger <[email protected]>
@@ -368,7 +368,9 @@ fetch_cache_get(const struct url *url, i
{
conn_t *conn, *last_conn = NULL;
- for (conn = connection_cache; conn; conn = conn->next_cached) {
+ for (conn = connection_cache; conn; last_conn = conn,
+ conn = conn->next_cached)
+ {
if (conn->cache_url->port == url->port &&
strcmp(conn->cache_url->scheme, url->scheme) == 0 &&
strcmp(conn->cache_url->host, url->host) == 0 &&
@@ -395,7 +397,7 @@ fetch_cache_get(const struct url *url, i
void
fetch_cache_put(conn_t *conn, int (*closecb)(conn_t *))
{
- conn_t *iter, *last;
+ conn_t *iter, *last, *oiter;
int global_count, host_count;
if (conn->cache_url == NULL || cache_global_limit == 0) {
@@ -405,20 +407,25 @@ fetch_cache_put(conn_t *conn, int (*clos
global_count = host_count = 0;
last = NULL;
- for (iter = connection_cache; iter;
- last = iter, iter = iter->next_cached) {
+ for (iter = connection_cache; iter; ) {
++global_count;
if (strcmp(conn->cache_url->host, iter->cache_url->host) == 0)
++host_count;
if (global_count < cache_global_limit &&
host_count < cache_per_host_limit)
- continue;
- --global_count;
- if (last != NULL)
- last->next_cached = iter->next_cached;
- else
- connection_cache = iter->next_cached;
- (*iter->cache_close)(iter);
+ oiter = NULL;
+ else {
+ --global_count;
+ if (last != NULL)
+ last->next_cached = iter->next_cached;
+ else
+ connection_cache = iter->next_cached;
+ oiter = iter;
+ }
+ last = iter;
+ iter = iter->next_cached;
+ if (oiter)
+ (*oiter->cache_close)(oiter);
}
conn->cache_close = closecb;