Hello,<br><br>I compiled subparse and pango in Windows and found a race condition in subparse. In Windows, subparse module crashed immediately, but when I put a g_usleep before get_pad_push(self->srcpad, buf) in handler_buffer() function of
gstsubparse.c, it works fine.<br><br>In gstsubparse.c:<br><br>static GstFlowReturn<br>handle_buffer (GstSubParse * self, GstBuffer * buf)<br>{<br> ...<br> g_usleep(1000 * 1000); /* I put sleep here */<br> ret = gst_pad_push (self->srcpad, buf);
<br> ....<br>}<br><br>I don't need to call g_usleep everytime, but only for the first time after the player is launched. The following code still works.<br><br>static GstFlowReturn<br>
handle_buffer (GstSubParse * self, GstBuffer * buf)<br>
{<br> static int init = 0;<br>
...<br><br> if (init ==0) { /* Put sleep only for the first time */<br> g_usleep(1000 * 1000);<br> init = 1;<br> }<br>
ret = gst_pad_push (self->srcpad, buf);<br>
....<br>
}<br><br><br>I guess there might be a subtle race condition bug in subparse or pango module. However, I failed to find the scenario how this happened. Is this a known issue?<br><br>The following is the stack trace from MSVC.
<br><br>> libgstplaybin.dll!00e53e37() <br> libgstplaybin.dll!00e53d70() <br> libgobject-2.0-0.dll!62743995() <br> msvcrt.dll!77bdc774() <br> libglib-2.0-0.dll!672d2449() <br>
libgobject-2.0-0.dll!62757195() <br> libglib-2.0-0.dll!672e52c5() <br> libgobject-2.0-0.dll!62747534() <br> libgobject-2.0-0.dll!6276388a() <br> libgobject-2.0-0.dll!62757f3e() <br>
ntdll.dll!7c940732() <br> ntdll.dll!7c9406ab() <br> libgthread-2.0-0.dll!64941273() <br> libglib-2.0-0.dll!672fe47e() <br> libgobject-2.0-0.dll!6275bfe3() <br> ntdll.dll!7c9406eb()
<br> libgthread-2.0-0.dll!64941b67() <br> msvcrt.dll!77bdc3ce() <br> libgthread-2.0-0.dll!64941b67() <br> libglib-2.0-0.dll!672f7045() <br> libgthread-2.0-0.dll!649412b3() <br>
libgstreamer-0.10.dll!003b0f10() <br> libgstreamer-0.10.dll!003b0f2b() <br> libgobject-2.0-0.dll!6274773b() <br> libgstreamer-0.10.dll!00399306() <br> libgobject-2.0-0.dll!6275cc54() <br>
ntdll.dll!7c9406eb() <br> msvcrt.dll!77bdc3c9() <br> msvcrt.dll!77bdc3ce() <br> msvcrt.dll!77bdc3ce() <br> libgobject-2.0-0.dll!6274773b() <br> libgstcoreelements.dll!00e7a980()
<br> libgobject-2.0-0.dll!627581b6() <br> libgstcoreelements.dll!00e7a9c3() <br> libgstreamer-0.10.dll!003b25ba() <br> libgstplaybin.dll!00e58d6c() <br> libgstreamer-0.10.dll!003b25ba()
<br> libgstreamer-0.10.dll!003a7225() <br> libgstreamer-0.10.dll!003b25ba() <br> libgstsubparse.dll!00df2b7c() <br> libgstsubparse.dll!00df26db() <br> libgstreamer-0.10.dll!003b25ba()
<br> libgstcoreelements.dll!00e7e58a() <br> libgstreamer-0.10.dll!003b25ba() <br> libgstreamer-0.10.dll!003a7225() <br> libgstreamer-0.10.dll!003b25ba() <br> libgstbase-0.10.dll!00eaa006
() <br> libgstreamer-0.10.dll!003c0959() <br> ntdll.dll!7c940551() <br> libglib-2.0-0.dll!672ff21a() <br> ntdll.dll!7c940551() <br> libgthread-2.0-0.dll!64941b42() <br> ntdll.dll!7c940551
() <br> libglib-2.0-0.dll!672fd775() <br> ntdll.dll!7c940551() <br> libgthread-2.0-0.dll!649420da() <br> msvcrt.dll!77bea3b0() <br> ntdll.dll!7c940551() <br> kernel32.dll!7c80b683
() <br> ntdll.dll!7c940551() <br><br>Thanks,<br>Kwang Yul Seo<br><br>