I am the creator of WinFsp [1], a user mode file system solution for Windows (i.e. FUSE for Windows). WinFsp has its own API, but I have been working on adding a FUSE (high-level) API using SSHFS as my primary test case. This has proven to work very well, except for one important problem which is the subject of my post.
FUSE provides an API fuse_daemonize() that allows a FUSE file system to become a daemon, which SSHFS uses. I have provided a simple implementation using daemon(3), which of course uses fork. Unfortunately SSHFS crashes whenever it is daemonized and I have traced the failure to an invalid Windows heap pointer. WinFsp consists of an FSD (file system driver) and a DLL component. The WinFsp DLL uses the Windows heap functions to manage memory (HeapAlloc/HeapFree). It seems that the Windows heap is not properly cloned after a fork, which leads to the crash I am experiencing. I have the following questions: (1) Is my assumption that Windows heaps are not properly cloned after a fork correct? A 2011 post [2] seems to suggest so. (2) Is there any workaround that the WinFsp DLL can use to get around this limitation and work properly after a fork? The obvious answer would be to have the DLL use Cygwin's malloc/free and this is indeed possible within the DLL's FUSE layer, but not workable elsewhere. Any insights welcome. Bill Zissimopoulos [1] http://www.secfs.net/winfsp/ [2] https://www.cygwin.com/ml/cygwin-developers/2011-04/msg00035.html