| Предыдущий | Следующий |
| VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD | VFW_E_CERTIFICATION_FAILURE |
VFW_E_PIN_ALREADY_BLOCKED
Практический смысл
VFW_E_PIN_ALREADY_BLOCKED (0X80040294) относится к DirectShow. Это failure HRESULT. Исходный признак результата зафиксирован в документации как IPinFlowControl::Block() has been called on another thread. The current thread cannot make any assumptions about this pin's block state
.
Этот результат нужно связывать с первым нативным возвратом и фактическим состоянием объекта; соседний HRESULT того же facility не доказывает ту же причину. Для этой страницы ключевая граница формулируется так: IPinFlowControl::Block finds that another thread has already established the pin block, so the current thread cannot assume or replace that state.
Специфичные признаки исходного описания
AllStat: “IPinFlowControl::Block() has been called on another thread. The current thread cannot make any assumptions about this pin's block state”.
IPinFlowControl::Block finds that another thread has already established the pin block, so the current thread cannot assume or replace that state.
Cause 1 for this result: two reconfiguration controllers race for the same pin.
Cause 2 for this result: stop and dynamic reconnect paths use separate locks.
Cause 3 for this result: the owning thread is delayed or abandoned without cleanup.
Action 1 for this result: serialize topology changes through one coordinator.
Что сохранить до исправления
- interface и method, на котором впервые появился HRESULT
- CLSID и friendly name задействованных filters, pin names и negotiated media type
- graph state/generation, renderer или capture device и первый предшествующий HRESULT
- временные метки media sample, rate/clock state и фактические параметры вызова
Как локализовать границу
Проверяйте filter graph, negotiated media type, timing и состояние конкретного interface, а не наличие codec вообще. Сначала воспроизведите минимальный сценарий без параллельного изменения конфигурации; затем сравните сохранённые параметры с условием из исходного описания. Если состояние исчезает после re-enumeration или пересоздания объекта, отдельно проверьте lifetime/generation race.
Исправление и повторная проверка
Критерий восстановления — исходный вызов проходит на тех же релевантных данных после конкретного подтверждённого изменения, а не заменяется соседним кодом.
Дополнительные признаки конкретного сценария
Cause 2 for this result: stop and dynamic reconnect paths use separate locks.
Cause 1 for this result: two reconfiguration controllers race for the same pin.
Evidence 2 for this result: block event handle and operation correlation IDs.
Технические ссылки
- Microsoft: DirectShow error and success codes.
- Microsoft: IPinFlowControl.
- Microsoft: dynamic graph building.
Нужно найти другой код? Найти другой код состояния или ошибки.