]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
import: reset PullJob properly
authorLennart Poettering <lennart@poettering.net>
Fri, 15 Jan 2021 20:22:27 +0000 (21:22 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 19 Jan 2021 17:29:59 +0000 (18:29 +0100)
Properly reset all fields that have to do with the current GET job when
we restart things. Previously we freed/reset only some stuff, leaking
some memory even.

src/import/pull-job.c

index 2f6bca8336503e77d6871d30803b21fb4d612a6c..b5fb0193ec1611657aa725f79bcea70b27219004 100644 (file)
@@ -72,11 +72,30 @@ static int pull_job_restart(PullJob *j, const char *new_url) {
                 return r;
 
         j->state = PULL_JOB_INIT;
+        j->error = 0;
         j->payload = mfree(j->payload);
         j->payload_size = 0;
         j->payload_allocated = 0;
         j->written_compressed = 0;
         j->written_uncompressed = 0;
+        j->content_length = UINT64_MAX;
+        j->etag = mfree(j->etag);
+        j->etag_exists = false;
+        j->mtime = 0;
+        j->checksum = mfree(j->checksum);
+
+        curl_glue_remove_and_free(j->glue, j->curl);
+        j->curl = NULL;
+
+        curl_slist_free_all(j->request_header);
+        j->request_header = NULL;
+
+        import_compress_free(&j->compress);
+
+        if (j->checksum_context) {
+                gcry_md_close(j->checksum_context);
+                j->checksum_context = NULL;
+        }
 
         r = pull_job_begin(j);
         if (r < 0)