сервер javascript под XULRunner не работает

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

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

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

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

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


person dicroce    schedule 27.05.2009    source источник
comment
(для ясности, вещь UniversalXPConnect происходит из результата Google: ‹nabble.com/›. Это странно, и в этом нет необходимости.)   -  person Nickolay    schedule 26.10.2009


Ответы (2)


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

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

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

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

Since you're calling init(), the only other way I see to get an NS_ERROR_NOT_INITIALIZED out of asyncListen is for the thread you're running on to no longer be accepting events... So something odd is happening. Are there in fact multiple threads involved?
person Nickolay    schedule 26.10.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;
}

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

спасибо, Харвиндер

person Community    schedule 08.12.2009