- From: Maarten <mrten@dds.nl>
- Date: Thu, 25 May 2000 09:51:12 -0400 (EDT)
- To: www-lib@w3.org
I've had a problem like this; in HTEvtLst.c, HTEventList_Loop(), the select call returned -1, specifically an WSAEINVAL error. One of the sockets in the FdArray was invalid. When going throught the logs, I noticed that one of the sockets *was* removed from the HashTable[], but *not* from the FdArray[]. Then I noticed that HTEventList_unregister(), called just before, logged this: Event....... Socket 140 unregistered for HTEvent_READ Event....... Couldn't find socket 140. Can't unregister type HTEvent_WRITE Now, I don't know why the program can't unegister HTEvent_WRITE, but I do know that in this call the socket gets removed from the HashTable[], but not from the FdArray. Another problem surfaced, sometimes one socket arose multiple times in the FdArray. I guess this should not be happening. Therefore, I changed the FD_CLR call in HTEventList_unregister to : while (FD_ISSET(s,FdArray+HTEvent_INDEX(type))) FD_CLR(s, FdArray+HTEvent_INDEX(type)); which took care of the second problem, and I added the same lines to the last part of HTEventList_unregister: if (THD_TRACE) { if (ret == HT_ERROR){ HTTRACE(THD_TRACE, "Event....... Couldn't find socket %d. ... while (FD_ISSET(s,FdArray+HTEvent_INDEX(type))) FD_CLR(s, FdArray+HTEvent_INDEX(type)); } } return ret; } This fixed the problem as far as I know. It is not the correct fix, though. This just solved the symptoms, not the actual problem. dd, Mrten.
Received on Thursday, 25 May 2000 09:53:17 UTC