Текущее время: 03 май 2025, 22:05 • Часовой пояс: UTC + 3 часа |
Переинициализация драйвера после сбоя
Автор | Сообщение |
EugeneF
|
|
Зарегистрирован: 16 апр 2008, 22:22 Сообщения: 611
|
Заметил еще одну неприятную недоработку...
Пару раз во время эксплуатации приложение по непонятной причине намертво зависало при сворачивании в трей из режима просмотра. Причины самого зависания обсуждать безсмысленно, поскольку оно крайне редкое и невоспроизводимое, тут может быть виной все что угодно - глюки железа, софта, бета-видеодрайвера Нвидии, итд...
Главное то, что после снятия зависшего приложения через диспетчер задач, запустить его повторно было уже не возможно. При запуске был черный экран без звука (запись тоже не работала). Помогала только перезагрузка. Видимо драйвер после некорректного завершения не позволяет себя програмно сбросить и переинициализироваться заново... Что совсем не есть гуд.
Также не удобно то, что устройство не возможно програмно выключить и за тем включить через диспетчер устройств без перезагрузки компа. Во всяком случае подобная операция помогает при похожих глюках драйвера DVB платы...
Напомню, что тюнер у меня - 407 FM с последними дровами и софтом.
|
|
|
Support
|
Добавлено: 22 май 2008, 16:26. Заголовок сообщения: |
|
|
Beholder |  |
Зарегистрирован: 19 авг 2004, 11:45 Сообщения: 616
|
Если процесс, подключенный к драйверу (аудио-, видео-, VBI рендерер и пр.) подвисает по какой-то причине так, что не может сам отключиться от драйвера (освободить пин), то драйвер остаётся «занят» и операционная система не сможет его перезапустить или выгрузить.
|
|
|
EugeneF
|
Добавлено: 22 май 2008, 21:11. Заголовок сообщения: |
|
|
Зарегистрирован: 16 апр 2008, 22:22 Сообщения: 611
|
Только процесс-то давно помер...
А захватом/освобождением пина управляет операционка? То есть это не в вашей власти?
|
|
|
Support
|
Добавлено: 23 май 2008, 16:28. Заголовок сообщения: |
|
|
Beholder |  |
Зарегистрирован: 19 авг 2004, 11:45 Сообщения: 616
|
При запуске приложения тюнера строится граф. Создаётся инстанс устройства видеозахвата и других устройств (аудио-, видео- рендереров и пр.). Далее алокируются пины устройств и устройства соединяются друг с другом. При подключении компонентов графа к пинам устройства видеозахвата, его пины лочатся. Устройство видеозахвата одно на всех и это делается для того, что бы ни одна другая программа не смогла получить к нему доступ.
Пин должен освобождать процесс или поток, алокировавший его. Если какой-то компонент графа подвис то вы снимаете задачу вручную. При этом либо Windows полностью убьет процесс и COM интерфейс графа разрушится (пины разлочаться автоматически), либо нет. Если нет, то процесс останется висеть в памяти с занятым пином. Может банально не запустится деструктор инстанса пина. Пин останется залоченным. Драйвер так и не узнает, что приложение работавшее с его устройством мертво и никого к нему больше не подпустит.
|
|
|
Викториан
|
Добавлено: 05 июн 2008, 19:09. Заголовок сообщения: |
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
Support писал(а): Если какой-то компонент графа подвис то вы снимаете задачу вручную. В точности такая ситуация возникает и при снятии процесса самой подвисшей программой, без ручного вмешательства. Например, запись завершилась, а значок в трее все еще показывает запись, хотя при подведении курсора ничего о записи не сообщается, она уже завершилась. Цитата: При этом либо Windows полностью убьет процесс и COM интерфейс графа разрушится (пины разлочаться автоматически), либо нет. Если нет, то процесс останется висеть в памяти с занятым пином. Через некоторое время система все же убьет процесс, и тогда врде ничего не мешает повторному запуску программы, OSD работает, а драйвер все еще заблокирован. Цитата: Может банально не запустится деструктор инстанса пина. Пин останется залоченным. Драйвер так и не узнает, что приложение работавшее с его устройством мертво и никого к нему больше не подпустит.
А что мешает проверять жизнеспособность приложения каким-либо способом, сделать что-то вроде программного Watch-dog'а?
Хотя, это не решение проблемы - проблему создает сам BTV своим собственным зависанием, причем именно в "переходных процессах" 
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
EugeneF писал(а): Заметил еще одну неприятную недоработку... Пару раз во время эксплуатации приложение по непонятной причине намертво зависало при сворачивании в трей из режима просмотра. Причины самого зависания обсуждать бессмысленно, поскольку оно крайне редкое и невоспроизводимое, тут может быть виной все что угодно - глюки железа, софта, бета-видеодрайвера Нвидии, и т.д... Кстати, у меня тоже NVIdia. до вчерашнего вечера стояла стабильная предыдущая версия, решил обновиться на новую, и что-то произошло с системой, мне не понравилось это и удалил драйвер, а система восстановила из комплекта SP1. При попытке установить драйвер вновь программа ругается, что предназначена для x64, а у меня i386/x86 система. Почему такой глюк, я так и не понял, и вместо интернациональной поставил успешно штатовскую версию, которая успешно работает. Как видно, на зависаниях это не отразилось. Глюки железа исключаем, ибо повторяется ситуация у других пользователей. Мой софт - Vista Basic Home SP1 x64. У тебя та же? Цитата: Главное то, что после снятия зависшего приложения через диспетчер задач, запустить его повторно было уже не возможно. При запуске был черный экран без звука (запись тоже не работала). Помогала только перезагрузка. Видимо драйвер после некорректного завершения не позволяет себя программно сбросить и переинициализироваться заново... Что совсем не есть гуд. У меня то же самое. Цитата: Также не удобно то, что устройство не возможно программно выключить и за тем включить через диспетчер устройств без перезагрузки компа.
Мне кажется, что все-таки возможно и без перезагрузки, только что пришла идея в голову: попробовать в диспетчере устройств отключить драйвер тюнера и включить его вновь. Попробую так сделать при очередном зависании.
По крайней мере, "привод" флэшек в системе тоже не отключается, поэтому микросхему вытащить проблематично, светодиод питания горит. Выход - выключать компьютер, в т.ч. и питание, а потом можно вытащить микросхему. Но я пробовал сделать такое и "в горячую", - просто отключал драйвер канала того гнезда USB, в котором функционирует этот "привод", и питание при этом успешно снималось.
Жаль, что разработчики системы не догадались сделать на панели сообщения "теперь флэш-диск можно извлечь" заодно и кнопку для отключения порта и включения порта, чтобы пользователь мог безопасно извлечь диск, а затем включить порт. Конечно, разработчикам удобнее сохранить принцип Plug'n'play, используя принцип горячего извлечения USB-дисков, но вот для многоконтактных SD и CF это неприемлемо, необходимо действительное отключение питания. При отключении порта происходит аппаратный сброс "привода"-адаптера, но драйвер после включения восстанавливает работу.
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
EugeneF
|
|
Зарегистрирован: 16 апр 2008, 22:22 Сообщения: 611
|
Викториан писал(а): Мой софт - Vista Basic Home SP1 x64. У тебя та же? У меня х86... Цитата: Мне кажется, что все-таки возможно и без перезагрузки, только что пришла идея в голову: попробовать в диспетчере устройств отключить драйвер тюнера и включить его вновь. Именно это я и имел ввиду. Не дает... Цитата: По крайней мере, "привод" флэшек в системе тоже не отключается, поэтому микросхему вытащить проблематично, светодиод питания горит.
Не совсем понял, это Вы о чем? О кардридере для SD карточек памяти? Вроде никогда с ним таких заморочек не было... Или я чего-то не понял?...
А по поводу зависаний, у меня они случаются довольно редко, но мне показалось, что зависание более вероятно, когда программа закрывается (или сворачивается) во время большой загрузки процессора. Т.е. возможно где-то в программе нарушена синхронизация между различными ее потоками. Ну к примеру, функция PP_StopStreaming в плагине вызывается раньше, чем завершается последний вызов PP_Process, или типа того...
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
EugeneF писал(а): Не совсем понял, это Вы о чем? О кардридере для SD карточек памяти? Вроде никогда с ним таких заморочек не было... Или я чего-то не понял?... Приходится под напряжением выдирать многоконтактную карточку, а это плохо как для кард-ридера, так и для флэшки. Жаль, что точно так же нельзя останавливать видеодрайвер тюнера. Цитата: А по поводу зависаний, у меня они случаются довольно редко, У меня же довольно часто... Цитата: но мне показалось, что зависание более вероятно, когда программа закрывается (или сворачивается) во время большой загрузки процессора. Т.е. возможно где-то в программе нарушена синхронизация между различными ее потоками. Ну к примеру, функция PP_StopStreaming в плагине вызывается раньше, чем завершается последний вызов PP_Process, или типа того...
Вот именно!
Опять подобное зависание после завершения записи, на этот раз даже окно программы не прорисовано, лишь тени других окон, да при попытке снять отбеливаться стали они...
<Сигнатура проблемы удалена администрацией>
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
EugeneF
|
|
Зарегистрирован: 16 апр 2008, 22:22 Сообщения: 611
|
Викториан писал(а): Приходится под напряжением выдирать многоконтактную карточку
Ну и что... Эти карточки прекрастно рассчитаны на горячее подключение. Обратите внимание - у них ножки сделаны немного разной длинны, чтобы обеспечить необходимый режим включения. Я всю жизнь выдергивал их прям так, как только лампочка мигать переставала, даже програмным извлечением обычно не пользуюсь, и ни разу пока еще проблем не было...
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
EugeneF писал(а): Эти карточки прекрасно рассчитаны на горячее подключение
Ну, значит кард-ридер у меня сдох не только по причине горячего отключения, но и по сопутствующим причинам. Я вдобавок надежностью флешки рисковать нехочу, а потому был бы признателен микрософтовцам, если бы они сделали возможность временного оперативного отключения питания порта USB, и не только для флэшевых устройств.
А что касается BTV, раз уж вышеописанных возможностей в микрософт не сотворили, то остается надеяться, что разработчики BeholdTV предусмотрят в драйвере функцию для освобождения аллокированых пинов, а также небольшую утилиту, путь даже запускаемую из командной строки, чтобы восстанавливать работу драйвера без перезагрузки системы.
Иначе BTV можно рассматривать даже как вредоносную программу - ведь приходится перезагружать нормально работающую систему в целях восстановления работоспособности некорректно работающего драйвера, по причине некорректной работы самого BTV. Если эта утилита будет отправлять разработчикам некоторую отладочную dump-информацию о зависании BTV, то это можно только приветствовать.
Как вариант, этой утилитой может быть и сам BTV при его первоначальном запуске, просто он должен убедиться, что в момент запуска нигде в памяти не находится незавершенная программа, которая заняла вышеуказанный "пин" (для Windows не писал драйвера, а потому даже разбираться не хочу, что это такое).
Почему бы программе не сообщать некоторые признаки драйверу, чтобы при следующем запуске BTV могла бы запросить их и по которым искать ту же зависшую программу в памяти, если она была запущена в том же сеансе?
И почему бы заодно не сделать возможным временно деаллокировать драйвер, при временно приостанавливаемом сеансе во время блокировки <Win>+<L> его пользователем (кроме случая записи), скрин-сейвером или после состояния сна, чтобы программа в другом активном сеансе могла беспрепятственно получить доступ к драйверу?
И заодно сделать возможным арбитраж агента-BTV в пользу той копии, которая имеет в распоряжении активный рабочий стол, - и для запуска по расписанию (чтобы не пытались одновременно две копии BTV запускаться при совпадении расписаний различных сеансов), и для работы с пульта ДУ?
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
Последний раз редактировалось Викториан 07 июн 2008, 20:02, всего редактировалось 1 раз.
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
EugeneF писал(а): Викториан писал(а): Мне кажется, что все-таки возможно и без перезагрузки, только что пришла идея в голову: попробовать в диспетчере устройств отключить драйвер тюнера и включить его вновь. Именно это я и имел ввиду. Не дает...
Сейчас опять завис BTV, снял его и запустил вновь - экран черный. Выгрузил, отключил драйвер, запустил вновь, - и получаю ошибку:
<Сигнатура проблемы удалена администрацией>
Система сняла задачу BTV, при повторном запуске вновь экран черный. Нормально завершаю задачу. При повторном запуске программы BTV после включения драйвера "Behold TV M6 Extra" получается вновь черный экран. К тому же включение драйвера требует перезагрузки системы...
Я не понимаю логику разработчиков, - если я пользуясь администраторскими правами вручную отключаю драйвер при работающей программе BTV или аналогичной сторонней, то сознательно создаю для нее аварийную ситуацию, и независимо от судьбы той программы можно было бы работу драйвера возобновлять "с чистого листа" после включения его вновь. Т.е. если программа зависла, то будет снята системой или человеком, а если нет, то ее можно нормально завершить, а драйвер при этом имеет уже освобожденный пин и повторная "просьба" освободить его должна быть просто проигнорирована. Тогда при повторном запуске программы она вновь подключится к драйверу и займет его ресурс, будет работать нормально без перезагрузки.
Надо полагать subj., система действительно оповещает драйвер о его предстоящем отключении, а также о произошедшем повторном подключении?
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
Admin
|
|
Beholder |  |
Зарегистрирован: 13 июл 2004, 13:23 Сообщения: 1089
|
Викториан писал(а): Сейчас опять завис BTV... ================== Описание: Ошибка привела к остановке взаимодействия программы с Windows.
Сигнатура проблемы:
Викториан, прекратите слать сообщения в духе "сейчас опять завис BTV" и постить свои сигнатуры проблем. Все ветки форума ими завалены, дальше некуда.
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
EugeneF писал(а): Пару раз во время эксплуатации приложение по непонятной причине намертво зависало при сворачивании в трей из режима просмотра.
Проблема зависания драйвера Vista (по причине бесконечного ожидания разблокировки ресурса) весьма серьезна, однако у меня она с 99% повторяемостью происходила. Обновил позавчера DirectX отсюда: http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=ru&Hash=iBUSYDiwh9EDubSNKiwaKeSkQx%2f%2bIpceakGSfV6qhhmbWOYeNw2ddvHdndW%2bYbYGIxANFnFXYPfpLxhP7rUW0A%3d%3d, и не смог воспроизвести ситуацию с зависанием (использую "Direct 3D DXVA 2.0 (EVR)"). Еще также на панели управления убрал Debug Layer" в состояние "Application Controlled" (было "Force On") и убедился, что в списке Direct3D 10 прописано приложение "BeholdTV.exe" (не знаю, кто и зачем его туда поместил).
Это еще не показатель, может на неделе опять зависания появятся, когда начну активно записывать телепрограммы, но посмотри пожалуйста у себя, не решит ли это проблему?
P.S.: Думаю, что есть off-line альтернатива: http://www.microsoft.com/downloads/details.aspx?familyid=822640AB-0983-4C41-9C70-632F6F42C557&displaylang=ru
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
Викториан
|
|
Зарегистрирован: 04 авг 2007, 20:26 Сообщения: 360 Откуда: Чебоксары
|
Admin писал(а): ... прекратите слать сообщения в духе "сейчас опять завис BTV" и постить свои сигнатуры проблем.
Всё-таки, надеюсь, что сам драйвер тоже будет переработан на тот случай, когда слетела программа BTV и "зависли" числящиеся за ней пины.
Не знаю как, но при очередной попытке подключения пина вполне можно было бы осуществлять проверку наличия задачи в памяти, и при её отсутствии провоцировать освобождение драйвера, пусть даже и аварийно, - чтобы не приходилось перезагружать компьютер.
Сейчас же вполне вероятно, что указанное в аннотации BTV 5.10 исправление ошибки сделает крайне маловероятным клинч, приводящий к неответу программы и аварийному её снятию системой (неотвечающая программа бесполезна):
Код: # Исправлена ошибка при последовательном получении группы WM-сообщений через PostMessage;
Благодарю коллектив Behold-TV за проделанную работу.
Спаси вас Бог!
[Windows'8.1 x64][nVidia 285.62][Asus P5LD2SE][4Gb DDR-II][Intel E6320][GeForce 7600GS][Behold TV M6 Extra][BTV5.25/BDA5.5.1.0]
|
|
|
EugeneF
|
Добавлено: 07 фев 2010, 12:36. Заголовок сообщения: |
|
|
Зарегистрирован: 16 апр 2008, 22:22 Сообщения: 611
|
Викториан писал(а): указанное в аннотации BTV 5.10 исправление ошибки
Является исправлением этогомелкого бага, и не имеет ни малейшего отношния к Вашей проблеме.
Кстати, в Windows 7 подобных проблем еще ни разу не возникало...
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|