我試圖渲染運行在XUL窗口頂部的GStreamer管道。當從另一個DLL調用功能時,插件應用程序掛起
爲此我寫了一個XPCOM插件。 XPCOM插件基本上是一個由Gecko引擎加載的dll文件。我的插件與GStreamer鏈接,因此它依賴於許多其他GStreamer插件(也是dll文件)。
調用GStreamer代碼(例如一個簡單的函數,如gst_pipeline_new
)會導致應用程序崩潰。更具體地說,它凍結和油腔滑調掛起消耗整個CPU核心(CPU總數的50%):
alt text http://img36.imageshack.us/img36/4354/tracep.png
會有人願意幫助我弄清楚發生了什麼問題呢?
編輯
一個幾句話:在Windows
- 單機的GStreamer項目做工精細。
- XUL插件也可以正常工作(只要我不進行任何GStreamer調用)。
- 從XUL插件中,我可以調用一個簡單的glib函數,像g_strndup沒有任何問題。
- 從插件中調用GStreamer函數會崩潰應用程序。
此代碼可以重現該問題。 (我不知道,如果它是有幫助的,但..)
插件.idl文件中定義的屬性videoWindow
:
#include "nsISupports.idl"
interface nsIDOMXULElement;
[scriptable, uuid(BFE3F1BF-1C7B-4da2-8EAB-12F7683FAF71)]
interface IVideo : nsISupports
{
attribute nsIDOMXULElement videoWindow;
};
它的實施可以重現該問題:
NS_IMETHODIMP Video::SetVideoWindow(nsIDOMXULElement * inXULVideoWindow)
{
GstElement * pipeline = gst_pipeline_new("test"); // freezes here
return NS_OK;
}
編輯
問題已修復。看到我自己對這篇文章的回答。
這可能是由於許多原因造成的 - 返回遞歸,堆棧損壞,競態條件 - 嘗試縮小問題的範圍,或者至少向我們展示一些代碼。 – 2010-01-08 21:57:02