Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/3rdparty.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2019-02-15 10:40:45 +0300
committerRoeland Jago Douma <roeland@famdouma.nl>2019-02-15 10:40:45 +0300
commit09ef9cef988ce39cde9f8e320ee7748d50c36636 (patch)
tree222583ed4e0ac6b692cd9f17ef6958621feda164 /icewind
parent42b675142d5c33b585f1bb204e910afeed7e98db (diff)
Bump icewind/streams to 0.7.0
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'icewind')
-rw-r--r--icewind/streams/src/CallbackWrapper.php18
1 files changed, 15 insertions, 3 deletions
diff --git a/icewind/streams/src/CallbackWrapper.php b/icewind/streams/src/CallbackWrapper.php
index 4eef5568..6071cd04 100644
--- a/icewind/streams/src/CallbackWrapper.php
+++ b/icewind/streams/src/CallbackWrapper.php
@@ -45,6 +45,11 @@ class CallbackWrapper extends Wrapper {
protected $readDirCallBack;
/**
+ * @var callable
+ */
+ protected $preCloseCallback;
+
+ /**
* Wraps a stream with the provided callbacks
*
* @param resource $source
@@ -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, $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);