Firefox падает, когда функция XPCOM вызывается из потока - PullRequest
0 голосов
/ 01 октября 2009

Я хочу создать тему из Компонента XPCOM ... Вот код для этого

nsresult rv = NS_OK;
    nsCOMPtr<Callback> obj = do_CreateInstance("@jscallback.p2psearch.com/f2f;1", &rv);
    NS_ENSURE_SUCCESS(rv, rv);
    char* str="Hello from C++";
    obj->Status(str);
    _beginthread( (void(*)(void* ))&(P2P::test), 0,obj);

    return NS_OK;//obj->Status(str);

А вот функция потока

Когда я вызываю функцию перед вызовом потока, она работает, но как только я напишу что-то вроде obj->Status(temp);, Firefox вылетает при функции этого вызова

class P2P{
    static char RecvBuf[1024];
public:
    static void test(Callback* obj){
    //  char* temp="Hellllllooo";
    //  obj->Status(temp);
  return;
}

};

1 Ответ

1 голос
/ 01 октября 2009

Когда ваш код, который начинает поток, выходит из области видимости, nsCOMPtr освобождает объект, устанавливая его refcount равным нулю. В этот момент объект будет удален. Вам нужно будет вызвать NS_ADDREF, прежде чем вы выйдете из области видимости (и обязательно вызовите NS_RELEASE, когда вы закончите с этим, чтобы не было утечки!).

...