I am trying to make mod_mem_cache cache file descriptors. When opening a file to be shared across threads, we must call apr_file_open() with the APR_XTHREAD option (non-cached files are not and should not be opened with this option).
So, when I am about to cache a file I am serving, I need to use the apr_file_open(APR_XTHREAD) call to re-open the file to be put in the cache. What pool to pass into the apr_file_open call? I could pass in r->pool, but then the apr_file_t would be cleaned up at the end of the request, which is not right. I could pass in some long lived pool but then the pool storage would not be cleaned up when the file is garbage collected (because it has expired, changed, whatever). It is unreasonable to give each open file its own pool (unless we can make that pool precisely the size of the apr_file_t, which I am assuming cannot be done in a reasonable fashion...). A conundrum... I would like to be able to call apr_file_open with an option to suppress registering the cleanup, something like this... apr_file_open(yadda,..., APR_XTHREAD|APR_DO_NOT_REGISTER_CLEANUP, r->pool); Then call apr_os_file_get() to retrieve the file descriptor which is the thing I will put in the cache object. When we serve a file out of the cache object, we can call apr_os_file_put(cache->fd, r->pool); to create the apr_file_t that we then place in a file bucket. Thoughts? Bill
