Сбой Microsoft Async RPC в Vista - PullRequest
3 голосов
/ 15 октября 2008

Я работаю над программой, которая выполняет вызовы RPC, когда клиент и сервер работают на одной машине. Я хочу, чтобы у клиента был тайм-аут на вызовы к серверу, потому что у нас возникли проблемы, из-за которых он перестал отвечать на запросы на сервере.

Для решения этой проблемы мы использовали асинхронный вызов RPC и отменили его, если истекло время ожидания.

Это нормально работало в XP, но теперь я нахожу сбои в Vista, и у меня есть тестовая программа, которая может воспроизводить эти сбои каждый раз (только в Vista, а не в XP). Кажется, это ошибка со стороны Microsoft. Стек вызовов из аварийного потока не включает в себя никаких вызовов нашего кода. Вот информация из аварийного дампа:

Call stack:
rpcrt4!_SEH_epilog4_GS+0x3979
rpcrt4!LRPC_CCALL::AbortCall+0x68
rpcrt4!LRPC_BASE_CCALL::HandleCancelMessage+0x6b
rpcrt4!LRPC_CCALL::HandleCancelMessage+0x42
rpcrt4!LRPC_CASSOCIATION::IoCompleted+0x341
rpcrt4!ProcessLrpcComplete+0x3b
rpcrt4!LOADABLE_TRANSPORT:Stick out tonguerocessIOEvents+0x212
rpcrt4!ProcessIOEventsWrapper+0xd
rpcrt4!BaseCachedThreadRoutine+0x5c
rpcrt4!ThreadStartRoutine+0x1e
kernel32!BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x23
ntdll!_RtlUserThreadStart+0x1b

Problem:
(ee4.139c): Access violation - code c0000005 (first/second chance not
available)
eax=01e0fcc4 ebx=002f8930 ecx=002f87e4 edx=002f87fc esi=002f87b0 edi=00000000
eip=76f08d9e esp=0200fe2c ebp=0200fe34 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
rpcrt4!_SEH_epilog4_GS+0x3979:
76f08d9e a300000000 mov dword ptr ds:[00000000h],eax
ds:0023:00000000=????????

Мне было интересно, сталкивался ли кто-нибудь с подобной проблемой и нашел ли ее решение? Может быть, для этой ситуации лучше использовать что-то кроме RPC?

...