From b4d114e5307ff5506ad14556173bb88bbe47dea5 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 8 Mar 2010 17:53:21 -0800 Subject: [PATCH] winverbs: allow WV:Disconnect() to be retried ND for some odd reason wants a successful return code for a failed disconnect call. If a Disconnect() call fails, allow it to be retried. Return STATUS_TIMEOUT - a 'successful' failure, rather than STATUS_IO_TIMEOUT, which is a 'failed' failure. (I love Windows, really, I do.) A subsequent call to EP: Disconnect() after a timeout will force the QP into the error state and force the EP into the disconnected state. Signed-off-by: Sean Hefty --- trunk/core/winverbs/kernel/wv_ep.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/trunk/core/winverbs/kernel/wv_ep.c b/trunk/core/winverbs/kernel/wv_ep.c index e35e6e8d..f7394dc2 100644 --- a/trunk/core/winverbs/kernel/wv_ep.c +++ b/trunk/core/winverbs/kernel/wv_ep.c @@ -518,7 +518,7 @@ static NTSTATUS WvEpIbCmHandler(iba_cm_id *pId, iba_cm_event *pEvent) WdfObjectReleaseLock(ep->Queue); break; case iba_cm_dreq_error: - WvEpCompleteDisconnect(ep, STATUS_IO_TIMEOUT); + WvEpCompleteDisconnect(ep, STATUS_TIMEOUT); break; case iba_cm_rep_received: WdfObjectAcquireLock(ep->Queue); @@ -1046,6 +1046,7 @@ void WvEpDisconnect(WV_PROVIDER *pProvider, WDFREQUEST Request) } } /* Fall through to passive disconnect case on failure */ + case WvEpActiveDisconnect: case WvEpPassiveDisconnect: ep->State = WvEpDisconnected; WdfObjectReleaseLock(ep->Queue); -- 2.46.0