diff options
author | Aaron Merey <amerey@redhat.com> | 2023-03-17 11:20:50 -0400 |
---|---|---|
committer | Aaron Merey <amerey@redhat.com> | 2023-03-17 11:20:50 -0400 |
commit | 5527216460c6131527c27b06dada015b67525966 (patch) | |
tree | 105275459bd5e2d6722302d24b035c6c4970b07f | |
parent | a7f65495258933eaf361e82eb325c9d826b455d5 (diff) | |
download | elfutils-5527216460c6131527c27b06dada015b67525966.tar.gz |
debuginfod-client.c: Skip empty file creation for cancelled queries
Empty files in the client cache are used to indicate that contacted
servers could not find a requested resource. Future queries for this
resource will not be attempted until the cache_miss_s duration has
passed.
Currently these empty files are also created when a query is cancelled
through the client's progressfn. This can occur, for example, when a
user cancels a download with ctrl-c.
This prevents user-cancelled queries from being retried promptly without
having to modify cache_miss_s. Fix this by skipping the creation of an
empty cache file when progressfn cancels a query.
Signed-off-by: Aaron Merey <amerey@redhat.com>
-rw-r--r-- | debuginfod/ChangeLog | 5 | ||||
-rw-r--r-- | debuginfod/debuginfod-client.c | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index f861eb72..5db5a753 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2023-03-17 Aaron Merey <amerey@redhat.com> + + * debuginfod-client.c (debuginfod_query_server): Do not create an + empty file in the cache if the query was cancelled by the progressfn. + 2023-02-07 Aaron Merey <amerey@redhat.com> * debuginfod-client.c (cache_find_section): Avoid returning -ENOENT diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index ef4d47e3..b33408eb 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1667,9 +1667,9 @@ debuginfod_query_server (debuginfod_client *c, } } while (num_msg > 0); - /* Create an empty file named as $HOME/.cache if the query fails - with ENOENT.*/ - if (rc == -ENOENT) + /* Create an empty file in the cache if the query fails with ENOENT and + it wasn't cancelled early. */ + if (rc == -ENOENT && !c->progressfn_cancel) { int efd = open (target_cache_path, O_CREAT|O_EXCL, DEFFILEMODE); if (efd >= 0) |