summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqfs/block_processor/backend.c10
-rw-r--r--lib/sqfs/block_processor/block_processor.c4
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/sqfs/block_processor/backend.c b/lib/sqfs/block_processor/backend.c
index f81304b..35e5b4c 100644
--- a/lib/sqfs/block_processor/backend.c
+++ b/lib/sqfs/block_processor/backend.c
@@ -298,6 +298,16 @@ int dequeue_block(sqfs_block_processor_t *proc)
if (proc->backlog < backlog_old)
break;
+ if ((proc->backlog == 1) &&
+ (proc->frag_block != NULL || proc->blk_current != NULL)) {
+ break;
+ }
+
+ if ((proc->backlog == 2) &&
+ proc->frag_block != NULL && proc->blk_current != NULL) {
+ break;
+ }
+
blk = proc->pool->dequeue(proc->pool);
if (blk == NULL) {
diff --git a/lib/sqfs/block_processor/block_processor.c b/lib/sqfs/block_processor/block_processor.c
index 8303dce..de177cd 100644
--- a/lib/sqfs/block_processor/block_processor.c
+++ b/lib/sqfs/block_processor/block_processor.c
@@ -278,8 +278,8 @@ int sqfs_block_processor_create_ex(const sqfs_block_processor_desc_t *desc,
((sqfs_object_t *)proc)->destroy = block_processor_destroy;
/* we need at least one current data block + one fragment block */
- if (proc->max_backlog < 2)
- proc->max_backlog = 2;
+ if (proc->max_backlog < 3)
+ proc->max_backlog = 3;
/* create the thread pool */
proc->pool = thread_pool_create(desc->num_workers, process_block);