mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-30 12:10:37 +00:00
Don't modify hash tables while iterating over them
This caused crashes for caps with more than a single struct when unreffing them in one way or another. Fixes bug #627677.
This commit is contained in:
parent
721340c32d
commit
9713ead713
2 changed files with 15 additions and 1 deletions
|
@ -57,8 +57,9 @@ private void RemoveStructureReference (Structure s) {
|
||||||
|
|
||||||
private void RemoveStructureReferences () {
|
private void RemoveStructureReferences () {
|
||||||
foreach (Structure s in structures.Values) {
|
foreach (Structure s in structures.Values) {
|
||||||
RemoveStructureReference (s);
|
s.CreateNativeCopy ();
|
||||||
}
|
}
|
||||||
|
structures.Clear ();
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport ("libgstreamer-0.10.dll") ]
|
[DllImport ("libgstreamer-0.10.dll") ]
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
using System;
|
using System;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Gst;
|
using Gst;
|
||||||
|
using Gst.Video;
|
||||||
|
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class CapsTest {
|
public class CapsTest {
|
||||||
|
@ -91,4 +92,16 @@ public class CapsTest {
|
||||||
"height=(int)480");
|
"height=(int)480");
|
||||||
Assert.IsTrue (caps3.IsEqual (caps4));
|
Assert.IsTrue (caps3.IsEqual (caps4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestManagedReferences() {
|
||||||
|
Caps tmp = VideoUtil.FormatToTemplateCaps(Gst.Video.VideoFormat.RGBX);
|
||||||
|
Caps caps = tmp.Copy();
|
||||||
|
caps[0]["width"] = 640;
|
||||||
|
caps[0]["height"] = 480;
|
||||||
|
|
||||||
|
caps.Append(tmp);
|
||||||
|
Caps any = Caps.NewAny();
|
||||||
|
caps.Merge(any);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue