- From: Kinuko Yasuda <kinuko@tom.sfc.keio.ac.jp>
- Date: Mon, 14 Feb 2000 19:15:51 +0900
- To: sam@topic.com.au
- Cc: www-lib@w3.org
Sam, please let me give the more description about my patch. Sam Couter <sam@topic.com.au> wrote: > HTFileOpen() calls this: > HTHost_setChannel(host, HTChannel_new(sockfd, NULL, YES)); > > Is that supposed to be called? If the "localhost" host object already has a > channel from a previous file open, doesn't it get lost? As you said, HostEvet() eventually calls HTFileOpen(), and HTFileOpen() calls HTHost_setChannel(). Then HTHost_setChannel() set the new socket to the "localhost" host object whether it has already had a channel for a previous file or not. I think if there is a file already opened, a new file request should be postponed until the previous one is done. Actually, HTCache.c seems to do this. When HTHost_addNet() returns HT_PENDING, i.e. there is a previous request, the new net object for that file is added to the list host->pending. In this case, the file should not be opened yet. If FileEvent() returns here(as in my patch), the previous file open eventually finishes and calls FileEvent() with HTEvent_CLOSE, then 1. FileEvent() calls FileCleanup(), 2. FileCleanup() calls HTNet_delete(), 3. HTNet_delete() calls unregister_net(), 4. unregister_net() calls check_pending(), 5. check_pending() calls HTHost_launchPending(), and 6. HTHost_launchPending() launches the postponed request in the host->pending. So eventually the postponed file request will be launched. If select() freezes in your code, I think there may be another reason... Hmm... I'm doing mistake something? -- kinuko
Received on Monday, 14 February 2000 05:15:46 UTC