Merge pull request #21216 from owncloud/fopen-statcache

Clear SMB statcache after fopen
This commit is contained in:
Thomas Müller 2015-12-28 10:21:26 +01:00
commit 24271cf953
2 changed files with 20 additions and 2 deletions

View File

@ -33,6 +33,7 @@ use Icewind\SMB\Exception\Exception;
use Icewind\SMB\Exception\NotFoundException;
use Icewind\SMB\NativeServer;
use Icewind\SMB\Server;
use Icewind\Streams\CallbackWrapper;
use Icewind\Streams\IteratorDirectory;
use OC\Files\Filesystem;
@ -189,7 +190,10 @@ class SMB extends Common {
return $this->share->read($fullPath);
case 'w':
case 'wb':
return $this->share->write($fullPath);
$source = $this->share->write($fullPath);
return CallBackWrapper::wrap($source, null, null, function () use ($fullPath) {
unset($this->statCache[$fullPath]);
});
case 'a':
case 'ab':
case 'r+':
@ -219,7 +223,8 @@ class SMB extends Common {
}
$source = fopen($tmpFile, $mode);
$share = $this->share;
return CallBackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) {
return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) {
unset($this->statCache[$fullPath]);
$share->put($tmpFile, $fullPath);
unlink($tmpFile);
});

View File

@ -598,4 +598,17 @@ abstract class Storage extends \Test\TestCase {
$this->instance->mkdir('source');
$this->assertTrue($this->instance->isSharable('source'));
}
public function testStatAfterWrite() {
$this->instance->file_put_contents('foo.txt', 'bar');
$stat = $this->instance->stat('foo.txt');
$this->assertEquals(3, $stat['size']);
$fh = $this->instance->fopen('foo.txt', 'w');
fwrite($fh, 'qwerty');
fclose($fh);
$stat = $this->instance->stat('foo.txt');
$this->assertEquals(6, $stat['size']);
}
}