Merge pull request #14580 from nextcloud/backport/14579/stable15
[stable15] Have streams of files_external in sync
This commit is contained in:
commit
95bc1a0198
|
@ -8,7 +8,7 @@
|
|||
"classmap-authoritative": true
|
||||
},
|
||||
"require": {
|
||||
"icewind/streams": "0.6.1",
|
||||
"icewind/streams": "0.7.1",
|
||||
"icewind/smb": "3.0.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "1357a8ac93fc039db0cf2c5cf5a45f13",
|
||||
"content-hash": "641ed61db5e07e8e9eaebfb6918ea521",
|
||||
"packages": [
|
||||
{
|
||||
"name": "icewind/smb",
|
||||
|
@ -49,16 +49,16 @@
|
|||
},
|
||||
{
|
||||
"name": "icewind/streams",
|
||||
"version": "0.6.1",
|
||||
"version": "v0.7.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icewind1991/Streams.git",
|
||||
"reference": "0a78597117d8a02937ea05206f219294449fb06e"
|
||||
"reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icewind1991/Streams/zipball/0a78597117d8a02937ea05206f219294449fb06e",
|
||||
"reference": "0a78597117d8a02937ea05206f219294449fb06e",
|
||||
"url": "https://api.github.com/repos/icewind1991/Streams/zipball/4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
|
||||
"reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -86,7 +86,7 @@
|
|||
}
|
||||
],
|
||||
"description": "A set of generic stream wrappers",
|
||||
"time": "2018-04-24T09:07:38+00:00"
|
||||
"time": "2019-02-15T12:57:29+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
|
|
@ -44,17 +44,17 @@
|
|||
},
|
||||
{
|
||||
"name": "icewind/streams",
|
||||
"version": "0.6.1",
|
||||
"version_normalized": "0.6.1.0",
|
||||
"version": "v0.7.1",
|
||||
"version_normalized": "0.7.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icewind1991/Streams.git",
|
||||
"reference": "0a78597117d8a02937ea05206f219294449fb06e"
|
||||
"reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icewind1991/Streams/zipball/0a78597117d8a02937ea05206f219294449fb06e",
|
||||
"reference": "0a78597117d8a02937ea05206f219294449fb06e",
|
||||
"url": "https://api.github.com/repos/icewind1991/Streams/zipball/4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
|
||||
"reference": "4db3ed6c366e90b958d00e1d4c6360a9b39b2121",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -64,7 +64,7 @@
|
|||
"phpunit/phpunit": "^4.8",
|
||||
"satooshi/php-coveralls": "v1.0.0"
|
||||
},
|
||||
"time": "2018-04-24T09:07:38+00:00",
|
||||
"time": "2019-02-15T12:57:29+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
|
|
|
@ -44,6 +44,11 @@ class CallbackWrapper extends Wrapper {
|
|||
*/
|
||||
protected $readDirCallBack;
|
||||
|
||||
/**
|
||||
* @var callable
|
||||
*/
|
||||
protected $preCloseCallback;
|
||||
|
||||
/**
|
||||
* Wraps a stream with the provided callbacks
|
||||
*
|
||||
|
@ -56,14 +61,15 @@ class CallbackWrapper extends Wrapper {
|
|||
*
|
||||
* @throws \BadMethodCallException
|
||||
*/
|
||||
public static function wrap($source, $read = null, $write = null, $close = null, $readDir = null) {
|
||||
public static function wrap($source, $read = null, $write = null, $close = null, $readDir = null, $preClose = null) {
|
||||
$context = stream_context_create(array(
|
||||
'callback' => array(
|
||||
'source' => $source,
|
||||
'read' => $read,
|
||||
'write' => $write,
|
||||
'close' => $close,
|
||||
'readDir' => $readDir
|
||||
'readDir' => $readDir,
|
||||
'preClose' => $preClose,
|
||||
)
|
||||
));
|
||||
return Wrapper::wrapSource($source, $context, 'callback', '\Icewind\Streams\CallbackWrapper');
|
||||
|
@ -76,6 +82,7 @@ class CallbackWrapper extends Wrapper {
|
|||
$this->writeCallback = $context['write'];
|
||||
$this->closeCallback = $context['close'];
|
||||
$this->readDirCallBack = $context['readDir'];
|
||||
$this->preCloseCallback = $context['preClose'];
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -90,7 +97,7 @@ class CallbackWrapper extends Wrapper {
|
|||
public function stream_read($count) {
|
||||
$result = parent::stream_read($count);
|
||||
if (is_callable($this->readCallback)) {
|
||||
call_user_func($this->readCallback, $count);
|
||||
call_user_func($this->readCallback, strlen($result));
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
@ -104,6 +111,11 @@ class CallbackWrapper extends Wrapper {
|
|||
}
|
||||
|
||||
public function stream_close() {
|
||||
if (is_callable($this->preCloseCallback)) {
|
||||
call_user_func($this->preCloseCallback, $this->loadContext('callback')['source']);
|
||||
// prevent further calls by potential PHP 7 GC ghosts
|
||||
$this->preCloseCallback = null;
|
||||
}
|
||||
$result = parent::stream_close();
|
||||
if (is_callable($this->closeCallback)) {
|
||||
call_user_func($this->closeCallback);
|
||||
|
|
Loading…
Reference in New Issue