From: Sam S. <sd...@gn...> - 2010-03-08 23:05:38
|
Joe...@t-... wrote: > >>From the CLISP POV what's important is that CLISP never looses sync > with the OS about the state of a file handle. Several years ago, a bug was > fixed in CLISP where the wrong fd was closed (or closed twice?), because sync was lost. > Imagine if closing a random connection would happen to your long running servers! > > The bug went like this: > open A -> fd5 > open B -> fd6 > close A (5) > open C -> fd5 again > Then somehow, CLISP wanted to close A again (finalization?), i.e. fd5. > The end result was that the completely unrelated stream C got closed. this is a realistic scenario. e.g., close_ichannel calls ChannelStreamLow_close (which calls close(2)) but then it calls ChannelStream_fini (which does some iconv finalization) which could signal an error; i.e., the stream could end up not marked as closed even though close(2) has already been called. maybe we should call ChannelStream_fini _before_ ChannelStreamLow_close? Bruno, why did you chose to close the socket before the encoding? |