+* [Bug 959] Refclock on Windows not properly releasing recvbuffs
* [Bug 993] Fix memory leak when fetching system messages
* much cleanup, fixes, and changes from Dave Mills.
* ntp_control.c: LEAPTAB is a filestamp, not an unsigned. From Dave Mills.
if (rb->used != 0)
msyslog(LOG_ERR, "******** freerecvbuff non-zero usage: %d *******", rb->used);
ISC_LIST_APPEND(free_recv_list, rb, link);
-#if defined SYS_WINNT
- rb->wsabuff.len = RX_BUFF_SIZE;
- rb->wsabuff.buf = (char *) rb->recv_buffer;
-#endif
free_recvbufs++;
UNLOCK();
}
static int OnIoReadComplete(DWORD, IoCompletionInfo *, DWORD, int);
static int OnWriteComplete(DWORD, IoCompletionInfo *, DWORD, int);
-
-#define BUFCHECK_SECS 10
-static void TransmitCheckThread(void *NotUsed);
static HANDLE hHeapHandle = NULL;
static HANDLE hIoCompletionPort = NULL;
static int QueueIORead( struct refclockio *rio, recvbuf_t *buff, IoCompletionInfo *lpo) {
- memset(lpo, 0, sizeof(IoCompletionInfo));
- memset(buff, 0, sizeof(recvbuf_t));
-
lpo->request_type = CLOCK_READ;
lpo->recv_buf = buff;
buff->fd = rio->fd;
- if (!ReadFile((HANDLE) buff->fd, &buff->recv_buffer, sizeof(buff->recv_buffer), NULL, (LPOVERLAPPED) lpo)) {
+ if (!ReadFile((HANDLE) buff->fd, buff->wsabuff.buf, buff->wsabuff.len, NULL, (LPOVERLAPPED) lpo)) {
DWORD Result = GetLastError();
switch (Result) {
case NO_ERROR :
recvbuf_t *buff;
recvbuf_t *newbuff;
struct refclockio * rio = (struct refclockio *) i;
+ l_fp arrival_time;
+
+ get_systime(&arrival_time);
/*
* Get the recvbuf pointer from the overlapped buffer.
* ignore 0 bytes read due to timeout's and closure on fd
*/
if (Bytes > 0 && errstatus != WSA_OPERATION_ABORTED) {
- get_systime(&buff->recv_time);
+ memcpy(&buff->recv_time, &arrival_time, sizeof(arrival_time));
buff->recv_length = (int) Bytes;
buff->receiver = rio->clock_recv;
buff->dstadr = NULL;
* Make sure we have a buffer
*/
if (buff == NULL) {
-// FreeHeap(lpo, "OnSocketRecv: Socket Closed");
return (1);
}