Ok on amd64. Now audacity not crash when opening a WAV file.
Thanks.

Mon, 3 Sep 2012 01:29:35 +0200 от Stefan Sperling <s...@openbsd.org>:
>       
>
>
        
        
>
                
                
                        
>Audacity crashes when opening a WAV file.
>
To reproduce, try: audacity file.wav
>
>
It ends up catching SIGABRT. Setting a breakpoint at abort()
>
reveals the abort() call comes from pthread_mutex_unlock().
>
Audacity is trying to unlock an unlocked mutex. The faulty code
>
calls the mTasksMutex.Unlock() function twice.
>
>
The corresponding code in Audacity trunk seems to have been fixed:
>http://code.google.com/p/audacity/source/browse/audacity-src/trunk/src/ondemand/ODManager.cpp?r=r11963#269
>
>
The diff below fixes the port (which needs an update to the
>
current release but that's for another day).
>
>
ok?
>
>
Index: Makefile
>
===================================================================
>
RCS file: /cvs/ports/audio/audacity/Makefile,v
>
retrieving revision 1.34
>
diff -u -p -r1.34 Makefile
>
--- Makefile    3 Jan 2012 07:03:54 -0000       1.34
>
+++ Makefile    2 Sep 2012 23:06:28 -0000
>
@@ -5,7 +5,7 @@ COMMENT=        free audio editor
>
 V=             1.3.9
>
 DISTNAME=      audacity-minsrc-${V}
>
 PKGNAME=       audacity-${V}
>
-REVISION=      3
>
+REVISION=      4
>
 CATEGORIES=    audio
>
 
>
 EXTRACT_SUFX=  .tar.bz2
>
Index: patches/patch-src_ondemand_ODManager_cpp
>
===================================================================
>
RCS file: patches/patch-src_ondemand_ODManager_cpp
>
diff -N patches/patch-src_ondemand_ODManager_cpp
>
--- /dev/null   1 Jan 1970 00:00:00 -0000
>
+++ patches/patch-src_ondemand_ODManager_cpp    2 Sep 2012 23:05:36 -0000
>
@@ -0,0 +1,13 @@
>
+$OpenBSD$
>
+fix abort() in pthread_mutex_unlock()
>
+--- src/ondemand/ODManager.cpp.orig    Mon Sep  3 01:04:47 2012
>
++++ src/ondemand/ODManager.cpp Mon Sep  3 01:05:08 2012
>
+@@ -283,7 +283,7 @@ void ODManager::Start()
>
+ 
>
+          //the thread will add it back to the array if the job is not yet 
done at the end of the thread's run. 
>
+          //mTasks.erase(mTasks.begin()); 
>
+-         mTasksMutex.Unlock();
>
++         //mTasksMutex.Unlock();
>
+ 
>
+          //detach a new thread.
>
+          thread = new ODTaskThread(mTasks[0]);//task);
>
>
                        
                
                
        

        

Reply via email to