When a client causes the c-treeACE process to load a data record filter callback DLL, if the client loses its connection to the server without first disconnecting, the server thread for that connection might hang when it closes the files for that connection if the data record filter callback DLL is used in an ISAM context and the data record filter callback DLL closes a file in its unload function. When this situation occurs, the symptoms are:
When c-treeACE closes the data and index files that are in use by a connection, it closes any ISAM contexts that have been established for the files. If a data filter is in effect for an ISAM context, the filter is freed. If the data filter uses a data filter callback DLL, the freeing of the data filter causes the filter DLL's unload function to be called. If the filter DLL's unload function closes the file that is in the process of being closed, the thread can deadlock itself by waiting for a temporary file state to clear (which will never happen because it is the thread itself that set that state).
Now, when an ISAM context is being closed and the data filter resources for that context are being freed , we check if this is happening while closing a file. If so, we defer the freeing of the data filter resources until the file close completes.