Summary: | 1С 8.0: падает при открытии html-ной заставки-приветствия | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Константин Кондратюк <kondratyuk> |
Component: | Internet Explorer / Gecko | Assignee: | Константин Кондратюк <kondratyuk> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | major | ||
Priority: | P2 | CC: | amorozov, baraka, ivan, lav, vitperov |
Version: | 1.0.9 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 1902 | ||
Bug Blocks: | 437, 1217 | ||
Attachments: | лог по html |
Description
Константин Кондратюк
2008-11-18 13:40:35 MSK
Падение при исполнении этой функции: void call_property_onchanged(ConnectionPoint *This, DISPID dispid) { DWORD i; for(i=0; i<This->sinks_size; i++) { if(This->sinks[i].propnotif) { FIXME("%p %d\n", This->sinks[i].propnotif, dispid); IPropertyNotifySink_OnChanged(This->sinks[i].propnotif, dispid); } } } Вызов IPropertyNotifySink_OnChanged приводит к падению. При простом отключении выполнения проблемной строки - грузится и отображается нормально. Но как только становится активным окном - сразу же сваливается. =>1 0x1cc0e382 in html (+0x4e382) (0x0032e914) 2 0x11ea2937 in bsl (+0x32937) (0x0032e9d0) 3 0x11ea2cba in bsl (+0x32cba) (0x0032ea64) Непосредственно перед падением - множество неудачных попыток получить IMarshal. С патчем на заглушки к IMarshal всё ещё хуже - либо неправильный патч, либо ведёт в более проблемную зону... Есть подозрение, что на этот раз падает после этого QI: warn:mshtml:HTMLDOMNode_QI (0x28a4d40)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b} 0x32e218) "Неизвестный" интерфейс: IHTMLElement={3050F1FF-98B5-11CF-BB82-00AA00BDCE0B} Нет, к этому QI обращается не всегда. А вот падает - всегда. Из чего можно слелать вывод, что причина кроется в другом. Created attachment 1055 [details]
лог по html
Последний лог может не иметь отношение к проблеме. Это использование нового gecko наверняка дало такое падения. С этой проблемой стоит разбираться отдельно. Очень похоже, что падение происходит опять где-то тут: fixme:mshtml:HTMLElement_get_outerHTML (0x2c67588)->(0x32dcb8) Такое уже было в баге #1902 и для 1.0.9 вылечилось простой инициализацией возвращаемой строки. Фикс есть в 1.0.10, но тем не менее падает. Наверное, стоит отключить эту правку и посмотреть на поведение 1С Нет, как минимум, 1cfile не падает с правкой, но падает без неё. Значит, она работает и на новых исходниках. Но вот то, что обычного пробела не хватает - это очень может быть... Падение происходит в клиентской части, после вызова IPropertyNotifySink_OnChanged с dispid==DISPID_READYSTATE Сам вызов происходит из вайновской функции call_property_onchanged() Для проверки отключил уведоления о READYSTATE Падает теперь дальше. warn:mshtml:HTMLDOMNode_QI (0x2ae3ea8)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b} 0x32d6a0) Это получение IHTMLElement, падение после неудачного вызова этой функции - уже привычное дело. Да, попытки копать в сторону QI дают результат. Единственная проблема - корректно через HTMLDOMNode получить объект IHTMLElement. Вопрос, актуальный для всех встречаемых в QI ...Element-объектов (см. багу #3484) Сейчас проблема воспроизводится на новой сборке 1.0.10 alt10/alt6 с новым Gecko (In reply to comment #10) > warn:mshtml:HTMLDOMNode_QI (0x2ae3ea8)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b} > 0x32d6a0) > Это получение IHTMLElement Нужно посмотреть раньше по трейсам. IHTMLElement должен возвращаться до вызова HTMLDOMNode (это как бы страховочный вариант,а так все *Element должны обрабатываться раньше), хотя бы из HTMLElement_QI: }else if(IsEqualGUID(&IID_IHTMLElement, riid)) { TRACE("(%p)->(IID_IHTMLElement %p)\n", This, ppv); *ppv = HTMLELEM(This); Собственно, проблема с IHTMLElement перестала воспроизводиться. Единственная проблема, из-за которой падаем - использование функции IPropertyNotifySink_OnChanged() с передачей в неё DISPID_READYSTATE Отключение вызова через проверку на dispid исключает падения, но неизвестно, к каким проблемам может привести в будущем. Могу сделать хак к релизу: for(i=0; i<This->sinks_size; i++) { - if(This->sinks[i].propnotif) + if(This->sinks[i].propnotif && dispid != DISPID_READYSTATE) IPropertyNotifySink_OnChanged(This->sinks[i].propnotif, dispid); } commit 357011ee2ee831cd80e5bacac50484c1dd1eb06b Author: Konstantin Kondratyuk <kondratyuk@etersoft.ru> Date: Tue Apr 7 14:36:09 2009 +0400 mshtml: Turn off notifies for DISPID_READYSTATE (eterbug #2942) Видимо, FIXED. Будем надеяться, что в наших сборках не появится ряд глюков gecko из-за отключенных уведомлений. > mshtml: Turn off notifies for DISPID_READYSTATE (eterbug #2942)
Патч вызывает зависание теста для dom в mshtml.
|