views:

333

answers:

2

Hi, I am working on a program that makes RPC calls where the client and the server are running on the same machine. I want the client have a timeout on it's calls to the server because we ran into problems of it becoming unresponsive waiting on the server.

To solve this problem we used an asynchronous RPC call and canceled it if timed out.

This was working fine in XP, but now I am finding crashes in Vista and I have a test program that can reproduce these crashes every time (only in Vista, not in XP). It seems to be a bug on Microsoft's side. The call stack from the crashed thread does not include any calls to our code. Here is the info from the crash dump:

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=????????

I was wondering if anyone has had a similar problem and had found a work around? Maybe it is better to use something other than RPC for this situation?

Thanks for your help in advance! -Jeremy

A: 

try this info RPC Debugging

lsalamon
A: 

What kind of program is this? Unmanaged C++? Is it something that needs high performance?

I'd keep away from such low-level APIs unless you're already down in the low level already. If you're there, then ignore this answer.

John Saunders