Есть MTA сервер (Singleton) в виде сервиса и два удаленных клиента. Сервер создает рабочий поток, который отсылает клиентам 1 раз в секунду пакет с данными. Для этого вызывается метод Begin_SendData каждого клиента. Затем для каждого клиента вызывается Finish_SendData.
Все это прекрасно работает, даже если клиенты постоянно подключаются и отключаются от сервера.
Проблемы начинаются когда один из клиентов аварийно завершает свою работу (например, отрубают комп). В этом случае я обрабатываю ошибку возвращаемую методом Finish_SendData, удаляю клиента из списка подключенных к серверу, освобождаю все созданные объекты — процесс аналогичный обычному отключению клиента. После этого намертво вешается первый или второй вызов функции Finish_SendData для оставшегося клиента.
Поставил проверку состояния вызова перед Finish_SendData (я ставил 500 мс) и каждый раз получаю RPC_S_CALLPENDING. После этого вызов функции Finish_SendData проходит успешно, данные клиенту идут, но во первых тормоза, а во вторых в системе начинают активно утекать HANDLE-ы. Проверял программой TaskInfo2003.
В чем может быть причина таких фокусов и как от нее избавиться?