Fix issue writing to file cache

Reading/writing to the same file cache key multiple times
in a row during a single request would result in failed reads.

Fixes #2114
This commit is contained in:
mark_story 2011-10-18 21:21:05 -04:00
parent d7155d374b
commit 95737d7adf
2 changed files with 18 additions and 0 deletions

View file

@ -128,6 +128,7 @@ class FileEngine extends CacheEngine {
$this->_File->flock(LOCK_EX); $this->_File->flock(LOCK_EX);
} }
$this->_File->rewind();
$success = $this->_File->ftruncate(0) && $this->_File->fwrite($contents) && $this->_File->fflush(); $success = $this->_File->ftruncate(0) && $this->_File->fwrite($contents) && $this->_File->fflush();
if ($this->settings['lock']) { if ($this->settings['lock']) {

View file

@ -97,6 +97,23 @@ class FileEngineTest extends CakeTestCase {
Cache::delete('test', 'file_test'); Cache::delete('test', 'file_test');
} }
/**
* Test read/write on the same cache key. Ensures file handles are re-wound.
*
* @return void
*/
public function testConsecutiveReadWrite() {
Cache::write('rw', 'first write', 'file_test');
$result = Cache::read('rw', 'file_test');
Cache::write('rw', 'second write', 'file_test');
$result2 = Cache::read('rw', 'file_test');
Cache::delete('rw', 'file_test');
$this->assertEquals('first write', $result);
$this->assertEquals('second write', $result2);
}
/** /**
* testExpiry method * testExpiry method
* *