summaryrefslogtreecommitdiff
path: root/lib/sqfs/block_processor
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-02-14 15:54:39 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-02-15 18:09:43 +0100
commit892066b0477186801d290953a9b994df353f8dbb (patch)
tree4e142a477da949f99da0697368f29fad3731b250 /lib/sqfs/block_processor
parent81c47bee5b554688aaeaedc9d8453a676b9a9107 (diff)
Cleanup: block processor: move finish function back into implementations
The "generic" version actually uses specific internals of the thread pool implementation. Move it back into the thread pool based implementation and simplify the serial processor. Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/block_processor')
-rw-r--r--lib/sqfs/block_processor/fileapi.c25
-rw-r--r--lib/sqfs/block_processor/serial.c19
-rw-r--r--lib/sqfs/block_processor/winpthread.c25
3 files changed, 44 insertions, 25 deletions
diff --git a/lib/sqfs/block_processor/fileapi.c b/lib/sqfs/block_processor/fileapi.c
index ede94d7..dbe3cf2 100644
--- a/lib/sqfs/block_processor/fileapi.c
+++ b/lib/sqfs/block_processor/fileapi.c
@@ -165,28 +165,3 @@ int sqfs_block_processor_end_file(sqfs_block_processor_t *proc)
proc->blk_index = 0;
return 0;
}
-
-int sqfs_block_processor_finish(sqfs_block_processor_t *proc)
-{
- int status = 0;
-
- append_to_work_queue(proc, NULL);
-
- while (proc->backlog > 0) {
- status = wait_completed(proc);
- if (status)
- return status;
- }
-
- if (proc->frag_block != NULL) {
- status = append_to_work_queue(proc, proc->frag_block);
- proc->frag_block = NULL;
-
- if (status)
- return status;
-
- status = wait_completed(proc);
- }
-
- return status;
-}
diff --git a/lib/sqfs/block_processor/serial.c b/lib/sqfs/block_processor/serial.c
index dce7490..b1e1823 100644
--- a/lib/sqfs/block_processor/serial.c
+++ b/lib/sqfs/block_processor/serial.c
@@ -77,3 +77,22 @@ int wait_completed(sqfs_block_processor_t *proc)
{
return proc->status;
}
+
+int sqfs_block_processor_finish(sqfs_block_processor_t *proc)
+{
+ if (proc->frag_block != NULL && proc->status == 0) {
+ proc->status = block_processor_do_block(proc->frag_block,
+ proc->cmp,
+ proc->scratch,
+ proc->max_block_size);
+
+ if (proc->status == 0) {
+ proc->status = process_completed_block(proc,
+ proc->frag_block);
+ }
+ }
+
+ free(proc->frag_block);
+ proc->frag_block = NULL;
+ return proc->status;
+}
diff --git a/lib/sqfs/block_processor/winpthread.c b/lib/sqfs/block_processor/winpthread.c
index ca07718..708a2d1 100644
--- a/lib/sqfs/block_processor/winpthread.c
+++ b/lib/sqfs/block_processor/winpthread.c
@@ -446,3 +446,28 @@ int wait_completed(sqfs_block_processor_t *proc)
}
return status;
}
+
+int sqfs_block_processor_finish(sqfs_block_processor_t *proc)
+{
+ int status = 0;
+
+ append_to_work_queue(proc, NULL);
+
+ while (proc->backlog > 0) {
+ status = wait_completed(proc);
+ if (status)
+ return status;
+ }
+
+ if (proc->frag_block != NULL) {
+ status = append_to_work_queue(proc, proc->frag_block);
+ proc->frag_block = NULL;
+
+ if (status)
+ return status;
+
+ status = wait_completed(proc);
+ }
+
+ return status;
+}