diff options
author | James Zern <jzern@google.com> | 2014-07-09 12:45:21 -0700 |
---|---|---|
committer | James Zern <jzern@google.com> | 2014-07-10 12:20:54 -0700 |
commit | 8701ed0270dd8da44efff5e19f3b0b6d3cac5b8b (patch) | |
tree | 0ab28cafd5e4bd0bf646638ad2b587274ed03ef2 /vp9/common | |
parent | f6bf614b2f77616e00d34a2503aa7d2bed4b61de (diff) | |
download | libvpx-8701ed0270dd8da44efff5e19f3b0b6d3cac5b8b.tar libvpx-8701ed0270dd8da44efff5e19f3b0b6d3cac5b8b.tar.gz libvpx-8701ed0270dd8da44efff5e19f3b0b6d3cac5b8b.tar.bz2 libvpx-8701ed0270dd8da44efff5e19f3b0b6d3cac5b8b.zip |
update vp9_thread.c
pull the latest from libwebp.
Original source:
http://git.chromium.org/webm/libwebp.git
100644 blob 264210ba2807e4da47eb5d18c04cf869d89b9784 src/utils/thread.c
commit 46fd44c1042c9903b2f1ab87e9f200a13c7e702d
Author: James Zern <jzern@google.com>
Date: Tue Jul 8 19:53:28 2014 -0700
thread: remove harmless race on status_ in End()
if a thread was still doing work when End() was called there'd be a race
on worker->status_. in these cases, however, the specific value is
meaningless as it would be >= OK and the thread would have been shut
down properly, but we'll check 'impl_' instead to avoid any potential
TSan/DRD reports.
Change-Id: Ib93cbc226a099f07761f7bad765549dffb8054b1
Change-Id: Ib0ef25737b3c6d017fa74822e21ed58508230b91
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_thread.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/vp9/common/vp9_thread.c b/vp9/common/vp9_thread.c index 348bdf6db..1c6aec032 100644 --- a/vp9/common/vp9_thread.c +++ b/vp9/common/vp9_thread.c @@ -11,7 +11,7 @@ // // Original source: // http://git.chromium.org/webm/libwebp.git -// 100644 blob 08ad4e1fecba302bf1247645e84a7d2779956bc3 src/utils/thread.c +// 100644 blob 264210ba2807e4da47eb5d18c04cf869d89b9784 src/utils/thread.c #include <assert.h> #include <string.h> // for memset() @@ -144,18 +144,19 @@ static void launch(VP9Worker *const worker) { } static void end(VP9Worker *const worker) { - if (worker->status_ >= OK) { #if CONFIG_MULTITHREAD + if (worker->impl_ != NULL) { change_state(worker, NOT_OK); pthread_join(worker->impl_->thread_, NULL); pthread_mutex_destroy(&worker->impl_->mutex_); pthread_cond_destroy(&worker->impl_->condition_); + vpx_free(worker->impl_); + worker->impl_ = NULL; + } #else - worker->status_ = NOT_OK; + worker->status_ = NOT_OK; + assert(worker->impl_ == NULL); #endif - } - vpx_free(worker->impl_); - worker->impl_ = NULL; assert(worker->status_ == NOT_OK); } |