diff options
author | Jonathan Lebon <jonathan@jlebon.com> | 2022-12-01 15:30:03 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-01 15:30:03 -0500 |
commit | ad96b8afea4dab3c2ab3ff8808b0b4fc3bf243f0 (patch) | |
tree | 4f8b7e466cf3e5bd19d5320a5b80ac401abcfe03 | |
parent | 1fb9404612f3d98d329f0129ecbc6c8225823679 (diff) | |
parent | 97e9bc7fd4a73c5c63e5390b3935cf986432ab6e (diff) | |
download | ostree-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.c | 8 |
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); |