Могу ли я вызвать синтаксический анализатор libxml из нескольких асинхронных сетевых вызовов? - PullRequest
3 голосов
/ 29 сентября 2010

У меня есть фрагмент кода, который использует NSURLConnection для асинхронной выборки сетевого ресурса и синтаксического анализа некоторого XML при его потоковой передаче. Синтаксический анализ XML обрабатывается libxml2, который доступен как платформа в iOS SDK.Это прекрасно работает, когда я вызываю его один раз, анализирую XML и освобождаю ресурсы, вызывая xmlFreeParserCtxt (ctxt).

Моя проблема в том, что когда я запускаю один и тот же код в нескольких потоках, внезапно я вижу всплывающее окно EXC_BAD_ACCESS, которое прослеживается до libxml2.В частности, контекст xmlParserCtxtPtr, который инициализируется и используется для синтаксического анализа XML, похоже, выбрасывает EXC_BAD_ACCESS, когда я освобождаю его после завершения получения ресурса.Исключение исчезает, если я не освобождаю этот контекст, т.е. вызываю xmlFreeParserCtxt (ctxt).

Это наводит меня на мысль, что мои проблемы связаны с тем, что библиотека libxml, доступная в iOS, не является поточно-ориентированной.

Конечно, я вижу это, когда задаю вопрос в Google: From: http://xmlsoft.org/threads.html

Начиная с версии 2.4.7, libxml2 обеспечивает условия для безопасной работы параллельных потоков впараллельный разбор разных документов.Тем не менее, есть несколько вещей, которые нужно сделать, чтобы это обеспечить:

* configure the library accordingly using the --with-threads options
* call xmlInitParser() in the "main" thread before using any of the libxml2 API (except possibly selecting a different memory allocator)

Поэтому у меня есть два вопроса: 1.) Верно ли мое предположение, что используемая мной версия libxml не является потокомбезопасно и, следовательно, вызывает проблему?Кто-нибудь еще видел это?2.) Я знаю, что iOS связывает libxml2.2.x - будет ли это работать, если я получу libxml2.4.7 и добавлю его в свой проект?Вызовет ли это какие-либо отклонения в магазине приложений?

Спасибо за ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...