Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 20 additions & 36 deletions SampleApplications/SampleLibraries/Client/Session.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3369,21 +3369,18 @@ private void AsyncRequestStarted(IAsyncResult result, uint requestId, uint typeI
lock (m_outstandingRequests)
{
// check if the request completed asynchronously.
AsyncRequestState state = RemoveRequest(result, requestId, typeId);

// add a new request.
if (state == null)
{
state = new AsyncRequestState();
if (result.IsCompleted)
return;

state.Defunct = false;
state.RequestId = requestId;
state.RequestTypeId = typeId;
state.Result = result;
state.Timestamp = DateTime.UtcNow;
// add request
AsyncRequestState state = new AsyncRequestState();
state.Defunct = false;
state.RequestId = requestId;
state.RequestTypeId = typeId;
state.Result = result;
state.Timestamp = DateTime.UtcNow;

m_outstandingRequests.AddLast(state);
}
m_outstandingRequests.AddLast(state);
}
}

Expand All @@ -3396,33 +3393,20 @@ private void AsyncRequestCompleted(IAsyncResult result, uint requestId, uint typ
{
// remove the request.
AsyncRequestState state = RemoveRequest(result, requestId, typeId);

if (state != null)
{
// mark any old requests as default (i.e. the should have returned before this request).
DateTime maxAge = state.Timestamp.AddSeconds(-1);

for (LinkedListNode<AsyncRequestState> ii = m_outstandingRequests.First; ii != null; ii = ii.Next)
{
if (ii.Value.RequestTypeId == typeId && ii.Value.Timestamp < maxAge)
{
ii.Value.Defunct = true;
}
}
}

// add a dummy placeholder since the begin request has not completed yet.
// if request was completed before registering in AsyncRequestStarted
if (state == null)
{
state = new AsyncRequestState();
return;

state.Defunct = true;
state.RequestId = requestId;
state.RequestTypeId = typeId;
state.Result = result;
state.Timestamp = DateTime.UtcNow;
// mark any old requests as default (i.e. the should have returned before this request).
DateTime maxAge = state.Timestamp.AddSeconds(-1);

m_outstandingRequests.AddLast(state);
for (LinkedListNode<AsyncRequestState> ii = m_outstandingRequests.First; ii != null; ii = ii.Next)
{
if (ii.Value.RequestTypeId == typeId && ii.Value.Timestamp < maxAge)
{
ii.Value.Defunct = true;
}
}
}
}
Expand Down