Javascript сервер под XULRunner не работает - PullRequest
0 голосов
/ 27 мая 2009

Я пытаюсь отладить упакованный DOM-пакет под названием лом . Во всяком случае, когда я бегу, я получаю:

Ошибка: [Исключение ... »Компонент возвратил код ошибки: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIServerSocket.asyncListen]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" расположение: JS frame / crowbar :: chrome :: chrome .js :: onLoad :: строка 375 "данные: нет]
Исходный файл: chrome: //crowbar/content/crowbar.js
Линия: 375

В основном, asyncListen() бросает NS_ERROR_NOT_INITIALIZED. Это странно, потому что строка кода непосредственно перед вызовом init()! Я попытался добавить:

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

как раз перед звонком на asyncListen(), и это не имело никакого эффекта. Это проблема безопасности? (кстати, в случае, если это имеет значение, это на коробке Fedora, работающей от имени root, с отключенным selinux) ... Я также пробовал несколько разных номеров портов ...

Ответы [ 2 ]

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

Вот исходный код: http://mxr.mozilla.org/mozilla-central/source/netwerk/base/src/nsServerSocket.cpp#369

Вы уверены, что init() не выйдет из строя (это то, что инициализирует mFD)? Может быть, что-то close это перед вашим звонком?

Я бы собрал отладочный XULRunner , чтобы построить отладочную версию и / или попытаться получить вывод журнала из приложения. К сожалению, я не могу понять, к чему относится макрос LOG() в этом коде, обычно это протоколирование NSPR , но вам нужно угадать имя модуля, чтобы включить ведение журнала для этого модуля.

Борис Збарский (один из разработчиков ядра Mozilla) говорит :

Поскольку вы вызываете init (), я вижу единственный способ получить NS_ERROR_NOT_INITIALIZED из asyncListen для потока, на котором вы работаете больше не принимать события ... Так что происходит нечто странное. Есть ли на самом деле несколько потоков?
0 голосов
/ 08 декабря 2009

Я тоже столкнулся с этой проблемой. Я получил свой код из CrowBar и запустил его через xulrunner 1.9.1 на Win 7.

Проблема возникает, когда меня отключают от сети. Если я в сети, это работает. У меня есть несколько потоков [несколько элементов XUL]. Но я полагаю, что я запускаю его в главном потоке (хотя я не уверен, как найти текущий поток), поэтому проблема с прослушиванием не должна быть проблемой.

Также я заметил, что в nsSocketTransportService2.cpp поток становится пустым, поэтому Борис может быть прав.

NS_IMETHODIMP
nsSocketTransportService::Dispatch (nsIRunnable *event, PRUint32 flags) 
{

    LOG(("STS dispatch [%p]\n", event));
    nsCOMPtr<nsIThread> thread = GetThreadSafely();
    NS_ENSURE_TRUE(thread, NS_ERROR_NOT_INITIALIZED);
    nsresult rv = thread->Dispatch(event, flags);
    if (rv == NS_ERROR_UNEXPECTED) {
        // Thread is no longer accepting events. We must have just shut it
        // down on the main thread. Pretend we never saw it.
        rv = NS_ERROR_NOT_INITIALIZED;
    }
    return rv;
}

Надеюсь, это поможет определить проблему.

спасибо harvinder

...