TDI_SEND Hang Problem

I have a TDI client that simply sends TCP data continuously. 8K buffers are
sent “synchronously” one-at-a-time from a dedicated system thread.
Synchronization is implemented using a kernel-mode event. After each
IoCallDriver call the caller waits on the event before sending the next
buffer. The send completion routine simply sets the event.

It is about as simple as possible, and all system calls are instrumented
with ASSERTs to insure that IRQL requirements are satisfied.

The problem that occurs is that OCCASIONALLY the send operation simply
hangs. The last operation that is performed is a IoCallDriver to send a
buffer, and the return is STATUS_PENDING.

The completion routine is simply never called…

UNLESS I ping the “hung” workstation from another workstation. The ping
apparently triggers something in TCP/IP that lets the operation proceed. At
least for a while. Eventually it hangs again. :frowning:

So far the problem appears to be related to one particular
workstation/adapter combination. The problem workstation is a dual 1GHz
PIII, and the problem appears when the workstation is running either Windows
2000 or Windows XP (doesn’t matter). The adapter is a Netgear GA622T Gigabit
Ethernet adapter connected full-duplex to via a Gigabit switch to another
workstation that is running a Winsock application to suck up the TCP stream.

Same driver on same workstation sending on 100BT adapter does not exhibit
the problem. I don’t think it’s strictly a speed (race) problem though. I
inserted a 1000BT/100BT switch in the path (which limits the path bandwidth
to 100BT) and the problem eventually occurred even though packets were
flying around at 1/10 speed.

Same driver running on other workstations using different Gigabit adapters
do not exhibit the problem.

I am running under Driver Verifier with no problems reported. NDIS Verifier
is on. NDIS, TDI and TCPIP checked drivers installed. I have tried running
/onecpu, but the behavior persists on one CPU.

I would love to write this one off as an adapter anomaly. HOWEVER, a
companion Winsock application that performs the same continuous send
function does NOT hang. SO, it must be something I am screwing up.

Any suggestions welcome.

Regards,

Thomas F. Divine

PCAUSA - Tools & Resources For Network Software Developers
NDIS Protocol/Intermediate/Hooking - TDI Client/Filter
http: - http:</http:></http:>