aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2026-04-22 12:40:48 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2026-04-22 12:40:48 -0400
commitf0e4bf0aba5110227b65f96e76c3e746e3059cb9 (patch)
tree0632b53dad6ae8d28b58ead08c375894093cc0f3 /src
parent5cd74d0e266bdec0de6e7463126220bc8f3722e8 (diff)
downloadstasis-f0e4bf0aba5110227b65f96e76c3e746e3059cb9.tar.gz
download: Increase number of SYSDEBUG calls around critical operations
* Jump out of retry loop on error to do clean up operations
Diffstat (limited to 'src')
-rw-r--r--src/lib/core/download.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/lib/core/download.c b/src/lib/core/download.c
index d3cbd93..397f1f6 100644
--- a/src/lib/core/download.c
+++ b/src/lib/core/download.c
@@ -11,10 +11,15 @@ size_t download_writer(void *fp, size_t size, size_t nmemb, void *stream) {
}
long download(char *url, const char *filename, char **errmsg) {
+ SYSDEBUG("%s", "ARGS follow");
+ SYSDEBUG("url=%s", url);
+ SYSDEBUG("filename=%s", filename);
+ SYSDEBUG("errmsg=%s (NULL is OK)", *errmsg);
long http_code = -1;
char user_agent[STASIS_NAME_MAX] = {0};
snprintf(user_agent, sizeof(user_agent), "stasis/%s", STASIS_VERSION);
+ SYSDEBUG("%s", "Setting timeout");
long timeout = 30L;
const char *timeout_str = getenv("STASIS_DOWNLOAD_TIMEOUT");
if (timeout_str) {
@@ -24,6 +29,7 @@ long download(char *url, const char *filename, char **errmsg) {
}
}
+ SYSDEBUG("%s", "Setting max_retries");
ssize_t max_retries = 5;
const char *max_retries_str = getenv("STASIS_DOWNLOAD_RETRY_MAX");
if (max_retries_str) {
@@ -33,6 +39,7 @@ long download(char *url, const char *filename, char **errmsg) {
}
}
+ SYSDEBUG("%s", "Setting max_retry_seconds");
ssize_t max_retry_seconds = 3;
const char *max_retry_seconds_str = getenv("STASIS_DOWNLOAD_RETRY_SECONDS");
if (max_retry_seconds_str) {
@@ -43,12 +50,15 @@ long download(char *url, const char *filename, char **errmsg) {
}
+ SYSDEBUG("%s", "Initializing curl context");
curl_global_init(CURL_GLOBAL_ALL);
CURL *c = curl_easy_init();
for (ssize_t retry = 0; retry < max_retries; retry++) {
if (retry) {
fprintf(stderr, "[RETRY %zu/%zu] %s: %s\n", retry + 1, max_retries, *errmsg, url);
}
+
+ SYSDEBUG("%s", "Configuring curl");
curl_easy_setopt(c, CURLOPT_URL, url);
curl_easy_setopt(c, CURLOPT_WRITEFUNCTION, download_writer);
FILE *fp = fopen(filename, "wb");
@@ -64,13 +74,19 @@ long download(char *url, const char *filename, char **errmsg) {
curl_easy_setopt(c, CURLOPT_CONNECTTIMEOUT, timeout);
SYSDEBUG("curl_easy_perform(): \n\turl=%s\n\tfilename=%s\n\tuser agent=%s\n\ttimeout=%zu", url, filename, user_agent, timeout);
- CURLcode curl_code = curl_easy_perform(c);
+ const CURLcode curl_code = curl_easy_perform(c);
SYSDEBUG("curl status code: %d", curl_code);
if (curl_code != CURLE_OK) {
+ SYSDEBUG("curl failed with code: %s", curl_easy_strerror(curl_code));
const size_t errmsg_maxlen = 256;
if (!*errmsg) {
+ SYSDEBUG("%s", "allocating memory for error message");
*errmsg = calloc(errmsg_maxlen, sizeof(char));
+ if (!*errmsg) {
+ SYSERROR("%s", "unable to allocate memory for error message");
+ goto cleanup;
+ }
}
snprintf(*errmsg, errmsg_maxlen, "%s", curl_easy_strerror(curl_code));
curl_easy_reset(c);
@@ -79,6 +95,8 @@ long download(char *url, const char *filename, char **errmsg) {
continue;
}
+ cleanup:
+ SYSDEBUG("%s", "Cleaning up");
// Data written. Clean up.
fclose(fp);