Commit: 447d2774989cd2df249e1d48cf44ef7e1a109a36
Author: Jörg Müller
Date:   Wed Nov 20 00:20:51 2013 +0100
http://developer.blender.org/rB447d2774989cd2df249e1d48cf44ef7e1a109a36

Fix IRC reported by elubie: windows crash with audio animation

There was a bug in how the iterators of STL list was used when erasing during 
iteration of a list, which was triggered by the STL implementation of MSVC, but 
hid well with gcc.

===================================================================

M       intern/audaspace/intern/AUD_AnimateableProperty.cpp

===================================================================

diff --git a/intern/audaspace/intern/AUD_AnimateableProperty.cpp 
b/intern/audaspace/intern/AUD_AnimateableProperty.cpp
index 6d1a307..61adae4 100644
--- a/intern/audaspace/intern/AUD_AnimateableProperty.cpp
+++ b/intern/audaspace/intern/AUD_AnimateableProperty.cpp
@@ -112,8 +112,12 @@ void AUD_AnimateableProperty::write(const float* data, int 
position, int count)
        // otherwise it's not at the end, let's check if some unknown part got 
filled
        else
        {
-               for(std::list<Unknown>::iterator it = m_unknown.begin(); it != 
m_unknown.end(); it++)
+               bool erased = false;
+
+               for(std::list<Unknown>::iterator it = m_unknown.begin(); it != 
m_unknown.end(); erased ? it : it++)
                {
+                       erased = false;
+
                        // unknown area before position
                        if(it->end < position)
                                continue;
@@ -130,9 +134,8 @@ void AUD_AnimateableProperty::write(const float* data, int 
position, int count)
                                if(position + count > it->end)
                                {
                                        // simply delete
-                                       std::list<Unknown>::iterator it2 = it;
-                                       it++;
-                                       m_unknown.erase(it2);
+                                       it = m_unknown.erase(it);
+                                       erased = true;
                                }
                                // the end is excluded, a second part remains
                                else

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to