| Index: source/libvpx/vp9/common/vp9_mvref_common.c
 | 
| diff --git a/source/libvpx/vp9/common/vp9_mvref_common.c b/source/libvpx/vp9/common/vp9_mvref_common.c
 | 
| index 51aa82411a9254d89b49574b7208e482f5ba0a28..52a731329d3ec8de5f8a9ea4d17e9bd205daec7f 100644
 | 
| --- a/source/libvpx/vp9/common/vp9_mvref_common.c
 | 
| +++ b/source/libvpx/vp9/common/vp9_mvref_common.c
 | 
| @@ -69,13 +69,23 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd,
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  // Synchronize here for frame parallel decode if sync function is provided.
 | 
| -  if (sync != NULL) {
 | 
| -    sync(data, mi_row);
 | 
| -  }
 | 
| +  // TODO(hkuang): Remove this sync after fixing pthread_cond_broadcast
 | 
| +  // on windows platform. The sync here is unncessary if use_perv_frame_mvs
 | 
| +  // is 0. But after removing it, there will be hang in the unit test on windows
 | 
| +  // due to several threads waiting for a thread's signal.
 | 
| +#if defined(_WIN32) && !HAVE_PTHREAD_H
 | 
| +    if (cm->frame_parallel_decode && sync != NULL) {
 | 
| +      sync(data, mi_row);
 | 
| +    }
 | 
| +#endif
 | 
|  
 | 
|    // Check the last frame's mode and mv info.
 | 
|    if (cm->use_prev_frame_mvs) {
 | 
| +    // Synchronize here for frame parallel decode if sync function is provided.
 | 
| +    if (cm->frame_parallel_decode && sync != NULL) {
 | 
| +      sync(data, mi_row);
 | 
| +    }
 | 
| +
 | 
|      if (prev_frame_mvs->ref_frame[0] == ref_frame) {
 | 
|        ADD_MV_REF_LIST(prev_frame_mvs->mv[0], refmv_count, mv_ref_list, Done);
 | 
|      } else if (prev_frame_mvs->ref_frame[1] == ref_frame) {
 | 
| 
 |