Call signal_decoding_done() outside pbi->row_mt_mutex_ lock
This CL moves the call to signal_decoding_done_for_erroneous_row()
function out of the 'pbi->row_mt_mutex_' lock as it doesn't require
this and it locks a mutex 'dec_row_mt_sync->mutex_[r]' internally.
Bug: aomedia:3276
Change-Id: I7c1da94dc6c9990b033f26d80179f9f242c9bcf9
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index e3cce40..fd7793c 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -3180,18 +3180,16 @@
pthread_mutex_lock(pbi->row_mt_mutex_);
#endif
frame_row_mt_info->row_mt_exit = 1;
-
+#if CONFIG_MULTITHREAD
+ pthread_cond_broadcast(pbi->row_mt_cond_);
+ pthread_mutex_unlock(pbi->row_mt_mutex_);
+#endif
// If any SB row (erroneous row) processed by a thread encounters an
// internal error, there is a need to indicate other threads that decoding
// of the erroneous row is complete. This ensures that other threads which
// wait upon the completion of SB's present in erroneous row are not waiting
// indefinitely.
signal_decoding_done_for_erroneous_row(pbi, &thread_data->td->dcb.xd);
-
-#if CONFIG_MULTITHREAD
- pthread_cond_broadcast(pbi->row_mt_cond_);
- pthread_mutex_unlock(pbi->row_mt_mutex_);
-#endif
return 0;
}
thread_data->error_info.setjmp = 1;