diff options
-rw-r--r-- | lib/sqfs/block_processor/backend.c | 10 | ||||
-rw-r--r-- | lib/sqfs/block_processor/block_processor.c | 4 |
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); |