From 528c48e4e9d38b4fe267d0a975b6bf32d969c211 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 2 May 2014 18:04:01 +0100 Subject: [PATCH] Revert "Hack around crash on exist of tests due to race between ~FFmpeg and __cxa_finalize." This reverts commit fde38b664c98205dd4fe3721b125469d5dd2ecbe. --- src/lib/ffmpeg.cc | 18 ++++-------------- src/lib/ffmpeg.h | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/lib/ffmpeg.cc b/src/lib/ffmpeg.cc index b78a0bbf6..a98aa9828 100644 --- a/src/lib/ffmpeg.cc +++ b/src/lib/ffmpeg.cc @@ -35,13 +35,7 @@ using std::stringstream; using boost::shared_ptr; using boost::lexical_cast; -/* This should not really be a pointer, but I find that __cxa_finalize tries - * to destroy the mutex while a call to ~FFmpeg is in progress; this crashes - * with a failure of assert (!posix::pthread_mutex_destroy(&m)); - * - * The hacky work-around is never to destroy the mutex... - */ -boost::mutex* FFmpeg::_mutex; +boost::mutex FFmpeg::_mutex; FFmpeg::FFmpeg (boost::shared_ptr c) : _ffmpeg_content (c) @@ -52,10 +46,6 @@ FFmpeg::FFmpeg (boost::shared_ptr c) , _frame (0) , _video_stream (-1) { - if (!_mutex) { - _mutex = new boost::mutex (); - } - setup_general (); setup_video (); setup_audio (); @@ -63,7 +53,7 @@ FFmpeg::FFmpeg (boost::shared_ptr c) FFmpeg::~FFmpeg () { - boost::mutex::scoped_lock lm (*_mutex); + boost::mutex::scoped_lock lm (_mutex); for (uint32_t i = 0; i < _format_context->nb_streams; ++i) { AVCodecContext* context = _format_context->streams[i]->codec; @@ -155,7 +145,7 @@ FFmpeg::setup_general () void FFmpeg::setup_video () { - boost::mutex::scoped_lock lm (*_mutex); + boost::mutex::scoped_lock lm (_mutex); assert (_video_stream >= 0); AVCodecContext* context = _format_context->streams[_video_stream]->codec; @@ -173,7 +163,7 @@ FFmpeg::setup_video () void FFmpeg::setup_audio () { - boost::mutex::scoped_lock lm (*_mutex); + boost::mutex::scoped_lock lm (_mutex); for (uint32_t i = 0; i < _format_context->nb_streams; ++i) { AVCodecContext* context = _format_context->streams[i]->codec; diff --git a/src/lib/ffmpeg.h b/src/lib/ffmpeg.h index 04be4873a..760918437 100644 --- a/src/lib/ffmpeg.h +++ b/src/lib/ffmpeg.h @@ -75,7 +75,7 @@ protected: a mutex around calls to avcodec_open* and avcodec_close... and here it is. */ - static boost::mutex* _mutex; + static boost::mutex _mutex; private: void setup_general (); -- 2.30.2