summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Lebon <jonathan@jlebon.com>2022-12-01 15:30:03 -0500
committerGitHub <noreply@github.com>2022-12-01 15:30:03 -0500
commitad96b8afea4dab3c2ab3ff8808b0b4fc3bf243f0 (patch)
tree4f8b7e466cf3e5bd19d5320a5b80ac401abcfe03
parent1fb9404612f3d98d329f0129ecbc6c8225823679 (diff)
parent97e9bc7fd4a73c5c63e5390b3935cf986432ab6e (diff)
downloadostree-ad96b8afea4dab3c2ab3ff8808b0b4fc3bf243f0.tar.gz
Merge pull request #2766 from cgwalters/avoid-endless-object-queueing
Closes https://github.com/ostreedev/ostree/issues/2732
-rw-r--r--src/libostree/ostree-repo-pull.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c
index 9412f1e1..18bb7fb7 100644
--- a/src/libostree/ostree-repo-pull.c
+++ b/src/libostree/ostree-repo-pull.c
@@ -150,6 +150,7 @@ static void enqueue_one_static_delta_superblock_request_s (OtPullData *
FetchDeltaSuperData *fetch_data);
static void enqueue_one_static_delta_part_request_s (OtPullData *pull_data,
FetchStaticDeltaData *fetch_data);
+static void ensure_idle_queued (OtPullData *pull_data);
static gboolean scan_one_metadata_object (OtPullData *pull_data,
const char *checksum,
@@ -385,6 +386,9 @@ check_outstanding_requests_handle_error (OtPullData *pull_data,
g_free (checksum);
}
+ /* Finally, if we still have capacity, scan more metadata objects */
+ if (!g_queue_is_empty (&pull_data->scan_object_queue))
+ ensure_idle_queued (pull_data);
}
}
@@ -461,6 +465,10 @@ ensure_idle_queued (OtPullData *pull_data)
if (pull_data->idle_src)
return;
+ /* If the operation queue is full, there's no point in blocking further. */
+ if (fetcher_queue_is_full (pull_data))
+ return;
+
idle_src = g_idle_source_new ();
g_source_set_callback (idle_src, idle_worker, pull_data, NULL);
g_source_attach (idle_src, pull_data->main_context);