Yalir / sfeMovie

sfeMovie is a simple C++ library that lets you play movies in SFML based applications. It relies on FFmpeg to read medias and remains consistent with SFML's naming conventions.
http://sfemovie.yalir.org/
GNU Lesser General Public License v2.1
114 stars 37 forks source link

Random freeze when calling Stop() (not especially after the end of the movie) #12

Closed Ceylo closed 13 years ago

Ceylo commented 13 years ago

Here the sample prog is freezed on Stop() (because of a dead lock) It's quite hard to get this freeze but it happens in maybe 1% cases..

Sampling process 1892 for 1 seconds with 1 millisecond of run time between samples
Sampling completed, processing symbols...
Analysis of sampling prog (pid 1892) every 1 millisecond
Process: prog [1892]
Path: /Users/ceylo/Development/sfeMovie/sample/./prog
Load Address: 0x100000000
Identifier: prog
Version: ??? (???)
Code Type: X86-64 (Native)
Parent Process: bash [1835]

Date/Time: 2011-03-24 23:56:12.468 +0100
OS Version: Mac OS X 10.6.7 (10J869)
Report Version: 6

Call graph:
783 Thread_24281 DispatchQueue_1: com.apple.main-thread (serial) 783 start 783 main 783 sfe::Movie::Stop() 783 pthread_mutex_lock 783 semaphore_wait_signal_trap 783 Thread_24282 DispatchQueue_2: com.apple.libdispatch-manager (serial) 783 start_wqthread 783 _pthread_wqthread 783 _dispatch_worker_thread2 783 _dispatch_queue_invoke 783 _dispatch_mgr_invoke 783 kevent 783 Thread_24286 783 thread_start 783 _pthread_start 783 glcDebugListener 783 mach_msg 783 mach_msg_trap 783 Thread_24288 783 thread_start 783 _pthread_start 783 CAPThread::Entry(CAPThread) 783 HP_IOThread::ThreadEntry(HP_IOThread) 783 HP_IOThread::WorkLoop() 778 CAGuard::WaitUntil(unsigned long long) 778 CAGuard::WaitFor(unsigned long long) 775 _pthread_cond_wait 767 semaphore_timedwait_signal_trap 6 _pthread_cond_wait 1 _pthread_cond_remove 1 __spin_lock 1 pthread_mutex_lock 3 __spin_lock 4 HP_IOThread::PerformIO(AudioTimeStamp const&, double) 4 IOA_Device::CallIOProcs(AudioTimeStamp const&, AudioTimeStamp const&, AudioTimeStamp const&) 2 HP_IOProc::Call(AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const, AudioTimeStamp const&, AudioBufferList) 2 AUGenericOutputEntry 1 0x112a1c8b2 1 AudioUnitGraph::GraphRenderCallback(void, unsigned int, AudioTimeStamp const, unsigned int, unsigned int, AudioBufferList) 1 AudioUnitGraph::HandleRenderNotify(bool, unsigned int, unsigned int, AudioTimeStamp const, unsigned int, void) 1 OALContext::ContextNotificationProc(void, unsigned int, AudioTimeStamp const, unsigned int, unsigned int, AudioBufferList) 1 OALContext::DoPreRender() 1 OALContext::GetSourceForRender(unsigned int) 1 CAMutex::Unlock() 1 __spin_lock 1 0x112a1c8d8 1 0x112a1d79f 1 0x112a1edd6 1 0x112a1f773 1 AudioConverterFillComplexBuffer 1 BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription) 1 AudioConverterChain::RenderOutput(CABufferList, unsigned int, unsigned int&, AudioStreamPacketDescription) 1 BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription) 2 IOA_SingleDevice::WriteOutputData(AudioTimeStamp const&, unsigned int) 2 IOA_HWDevice::WriteOutputData(unsigned int, unsigned int, unsigned int, unsigned long long) 2 iokit_user_client_trap 1 IOA_SingleDevice::GetCurrentTime(AudioTimeStamp&)

Total number in stack (recursive counted multiple, when >=5):

Sort by top of stack, same collapsed (when >= 5):
kevent 783 mach_msg_trap 783 semaphore_wait_signal_trap 783 semaphore_timedwait_signal_trap 767 _pthread_cond_wait 6 __spin_lock 5
Ceylo commented 13 years ago

Does not seem to happen anymore with new implementation. Closing.