aboutsummaryrefslogtreecommitdiff
path: root/lib/sqfs/block_processor/winpthread.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqfs/block_processor/winpthread.c')
-rw-r--r--lib/sqfs/block_processor/winpthread.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/lib/sqfs/block_processor/winpthread.c b/lib/sqfs/block_processor/winpthread.c
index 6d7c843..ca07718 100644
--- a/lib/sqfs/block_processor/winpthread.c
+++ b/lib/sqfs/block_processor/winpthread.c
@@ -410,19 +410,6 @@ static int process_done_queue(sqfs_block_processor_t *proc, sqfs_block_t *queue)
return status;
}
-int test_and_set_status(sqfs_block_processor_t *proc, int status)
-{
- LOCK(&proc->mtx);
- if (proc->status == 0) {
- proc->status = status;
- } else {
- status = proc->status;
- }
- SIGNAL_ALL(&proc->queue_cond);
- UNLOCK(&proc->mtx);
- return status;
-}
-
int wait_completed(sqfs_block_processor_t *proc)
{
sqfs_block_t *queue;
@@ -446,5 +433,16 @@ int wait_completed(sqfs_block_processor_t *proc)
}
status = process_done_queue(proc, queue);
- return status ? test_and_set_status(proc, status) : status;
+
+ if (status != 0) {
+ LOCK(&proc->mtx);
+ if (proc->status == 0) {
+ proc->status = status;
+ } else {
+ status = proc->status;
+ }
+ SIGNAL_ALL(&proc->queue_cond);
+ UNLOCK(&proc->mtx);
+ }
+ return status;
}