aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dm/DM.cpp2
-rw-r--r--include/core/SkStream.h2
-rw-r--r--src/core/SkStream.cpp9
-rw-r--r--src/pdf/SkPDFTypes.cpp2
-rw-r--r--tests/PDFDeflateWStreamTest.cpp2
-rw-r--r--tools/skiaserve/urlhandlers/PostHandler.cpp3
6 files changed, 11 insertions, 9 deletions
diff --git a/dm/DM.cpp b/dm/DM.cpp
index cc662bc44f..4b51030557 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -1089,7 +1089,7 @@ struct Task {
}
// We're likely switching threads here, so we must capture by value, [=] or [foo,bar].
- SkStreamAsset* data = stream.detachAsStream();
+ SkStreamAsset* data = stream.detachAsStream().release();
gDefinitelyThreadSafeWork.add([task,name,bitmap,data]{
std::unique_ptr<SkStreamAsset> ownedData(data);
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
index 8df59afaf3..0a53d47cf2 100644
--- a/include/core/SkStream.h
+++ b/include/core/SkStream.h
@@ -383,7 +383,7 @@ public:
sk_sp<SkData> detachAsData();
/** Reset, returning a reader stream with the current content. */
- SkStreamAsset* detachAsStream();
+ std::unique_ptr<SkStreamAsset> detachAsStream();
/** Reset the stream to its original, empty, state. */
void reset();
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index 133df83078..f0e16a6ff6 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -759,12 +759,13 @@ private:
size_t fCurrentOffset;
};
-SkStreamAsset* SkDynamicMemoryWStream::detachAsStream() {
- auto stream = skstd::make_unique<SkBlockMemoryStream>(sk_make_sp<SkBlockMemoryRefCnt>(fHead),
- this->bytesWritten());
+std::unique_ptr<SkStreamAsset> SkDynamicMemoryWStream::detachAsStream() {
+ std::unique_ptr<SkStreamAsset> stream
+ = skstd::make_unique<SkBlockMemoryStream>(sk_make_sp<SkBlockMemoryRefCnt>(fHead),
+ this->bytesWritten());
fHead = nullptr; // signal reset() to not free anything
this->reset();
- return stream.release();
+ return stream;
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp
index 7a1e0a48f5..42b4ed4953 100644
--- a/src/pdf/SkPDFTypes.cpp
+++ b/src/pdf/SkPDFTypes.cpp
@@ -568,7 +568,7 @@ void SkPDFStream::setData(std::unique_ptr<SkStreamAsset> stream) {
fDict.insertInt("Length", originalLength);
return;
}
- fCompressedData.reset(compressedData.detachAsStream());
+ fCompressedData = compressedData.detachAsStream();
fDict.insertName("Filter", "FlateDecode");
fDict.insertInt("Length", compressedLength);
#endif
diff --git a/tests/PDFDeflateWStreamTest.cpp b/tests/PDFDeflateWStreamTest.cpp
index dcb7547495..3d734c81a1 100644
--- a/tests/PDFDeflateWStreamTest.cpp
+++ b/tests/PDFDeflateWStreamTest.cpp
@@ -28,7 +28,7 @@ void skia_free_func(void*, void* address) { sk_free(address); }
* Use the un-deflate compression algorithm to decompress the data in src,
* returning the result. Returns nullptr if an error occurs.
*/
-SkStreamAsset* stream_inflate(skiatest::Reporter* reporter, SkStream* src) {
+std::unique_ptr<SkStreamAsset> stream_inflate(skiatest::Reporter* reporter, SkStream* src) {
SkDynamicMemoryWStream decompressedDynamicMemoryWStream;
SkWStream* dst = &decompressedDynamicMemoryWStream;
diff --git a/tools/skiaserve/urlhandlers/PostHandler.cpp b/tools/skiaserve/urlhandlers/PostHandler.cpp
index 34beefae11..634a2e5da2 100644
--- a/tools/skiaserve/urlhandlers/PostHandler.cpp
+++ b/tools/skiaserve/urlhandlers/PostHandler.cpp
@@ -62,7 +62,8 @@ int PostHandler::handle(Request* request, MHD_Connection* connection,
MHD_destroy_post_processor(uc->fPostProcessor);
uc->fPostProcessor = nullptr;
- if (!request->initPictureFromStream(request->fUploadContext->fStream.detachAsStream())) {
+ std::unique_ptr<SkStreamAsset> stream(request->fUploadContext->fStream.detachAsStream());
+ if (!request->initPictureFromStream(stream.get())) {
fprintf(stderr, "Could not create picture from stream.\n");
return MHD_NO;
}