ref: eb16f00cf25e54f08c5a9ec25a8780ca708a2c3a
parent: ca5c1b17a2f651639e5f165177acd0178985a761
author: Yunqing Wang <yunqingwang@google.com>
date: Thu May 5 06:42:29 EDT 2011
Fix rare hang in multi-thread encoder on Windows This patch is to fix a rare hang in multi-thread encoder that was only seen on Windows. Thanks for John's help in debugging the problem. More test is needed. Change-Id: Idb11c6d344c2082362a032b34c5a602a1eea62fc
--- a/vp8/encoder/ethreading.c
+++ b/vp8/encoder/ethreading.c
@@ -514,6 +514,7 @@
LPFTHREAD_DATA * lpfthd = &cpi->lpf_thread_data;
sem_init(&cpi->h_event_start_lpf, 0, 0);
+ sem_init(&cpi->h_event_end_picklpf, 0, 0);
sem_init(&cpi->h_event_end_lpf, 0, 0);
lpfthd->ptr1 = (void *)cpi;
@@ -547,6 +548,7 @@
sem_destroy(&cpi->h_event_end_encoding);
sem_destroy(&cpi->h_event_end_lpf);
+ sem_destroy(&cpi->h_event_end_picklpf);
sem_destroy(&cpi->h_event_start_lpf);
//free thread related resources
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -3140,7 +3140,7 @@
#if CONFIG_MULTITHREAD
if (cpi->b_multi_threaded)
- sem_post(&cpi->h_event_end_lpf); /* signal that we have set filter_level */
+ sem_post(&cpi->h_event_end_picklpf); /* signal that we have set filter_level */
#endif
if (cm->filter_level > 0)
@@ -4135,7 +4135,7 @@
#if CONFIG_MULTITHREAD
/* wait that filter_level is picked so that we can continue with stream packing */
if (cpi->b_multi_threaded)
- sem_wait(&cpi->h_event_end_lpf);
+ sem_wait(&cpi->h_event_end_picklpf);
#endif
// build the bitstream
--- a/vp8/encoder/onyx_int.h
+++ b/vp8/encoder/onyx_int.h
@@ -590,6 +590,7 @@
sem_t *h_event_start_encoding;
sem_t h_event_end_encoding;
sem_t h_event_start_lpf;
+ sem_t h_event_end_picklpf;
sem_t h_event_end_lpf;
#endif
--
⑨