in sfProcessCache, the type of memory cacher used is determined the first time a memory cache operation is executed, and the result of the detection is saved in a static variable.
However, because of how sfProcessCache::clear() is called in the sfConfigCache file, it is called repeated times (20 times, once for each config file that is supposed to be cached!), and the first 3 times, no config file settings have been loaded yet. In the detection method, it checks for the existence of a config setting called "sf_use_process_cache" to make sure is hasn't been disabled by an app's settings. However, since this has not been loaded the first time sfProcessCache::clear() is called, it is assumed that this value is 'false' and so the sfProcessCache is disabled entirely, and because the detection method caches it's result, it is not available for the duration of the hit.
I have attached a patch which fixes this. First, it ONLY calls sfProcessCache::clear() IF that config setting exists. Second, it keeps track, as a static variable, whether or not the clear() method has been called or not yet. This means it is only called once.