From: Helge Norberg Date: Wed, 9 Dec 2015 13:56:31 +0000 (+0100) Subject: Try to use a unique pdwCookie when Advising an ITimerSink in flash producer. This... X-Git-Tag: 2.1.0_Beta1~143 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=dc5575b2004ed4682a1de29f6501529967743559;p=casparcg Try to use a unique pdwCookie when Advising an ITimerSink in flash producer. This might avoid a deadlock, but we are not sure. --- diff --git a/modules/flash/interop/TimerHelper.h b/modules/flash/interop/TimerHelper.h index a848ac011..6d2c7ac0e 100644 --- a/modules/flash/interop/TimerHelper.h +++ b/modules/flash/interop/TimerHelper.h @@ -34,20 +34,25 @@ namespace flash { public: TimerHelper() {} - TimerHelper(DWORD first, DWORD interv, ITimerSink* pTS) : firstTime(first), interval(interv), currentTime(first), pTimerSink(pTS) + TimerHelper(DWORD id, DWORD first, DWORD interv, ITimerSink* pTS) + : ID(id) + , firstTime(first) + , interval(interv) + , currentTime(first) + , pTimerSink(pTS) { - ID = first; } + ~TimerHelper() { } - void Setup(DWORD first, DWORD interv, ITimerSink* pTS) + void Setup(DWORD id, DWORD first, DWORD interv, ITimerSink* pTS) { + ID = id; firstTime = first; interval = interv; currentTime = first; pTimerSink = pTS; - ID = first; } DWORD Invoke() @@ -64,11 +69,11 @@ namespace flash { return currentTime; } + DWORD ID; DWORD firstTime; DWORD interval; DWORD currentTime; ATL::CComPtr pTimerSink; - DWORD ID; }; } //namespace flash diff --git a/modules/flash/producer/FlashAxContainer.cpp b/modules/flash/producer/FlashAxContainer.cpp index 1b2de2458..b9ff2e5a5 100644 --- a/modules/flash/producer/FlashAxContainer.cpp +++ b/modules/flash/producer/FlashAxContainer.cpp @@ -540,7 +540,8 @@ HRESULT STDMETHODCALLTYPE FlashAxContainer::Advise(VARIANT vtimeMin, VARIANT vti if(pTimerHelper != 0) { - pTimerHelper->Setup(vtimeMin.ulVal, vtimeInterval.ulVal, pTimerSink); + static tbb::atomic NEXT_ID; + pTimerHelper->Setup(++NEXT_ID, vtimeMin.ulVal, vtimeInterval.ulVal, pTimerSink); *pdwCookie = pTimerHelper->ID; bHasNewTiming_ = true;