| Index: src/ports/SkFontHost_fontconfig.cpp
|
| ===================================================================
|
| --- src/ports/SkFontHost_fontconfig.cpp (revision 9222)
|
| +++ src/ports/SkFontHost_fontconfig.cpp (working copy)
|
| @@ -136,16 +136,30 @@
|
| SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const {
|
| SkStream* stream = this->getLocalStream();
|
| if (stream) {
|
| - // TODO: fix issue 1176.
|
| - // As of now open_stream will return a stream and unwind it, but the
|
| - // SkStream is not thread safe, and if two threads use the stream they
|
| - // may collide and print preview for example could still fail,
|
| - // or there could be some failures in rendering if this stream is used
|
| - // there.
|
| + // should have been provided by CreateFromStream()
|
| + *ttcIndex = 0;
|
| +
|
| + SkAutoTUnref<SkStream> dupStream(stream->duplicate());
|
| + if (dupStream) {
|
| + return dupStream.detach();
|
| + }
|
| +
|
| + // TODO: update interface use, remove the following code in this block.
|
| + size_t length = stream->getLength();
|
| +
|
| + const void* memory = stream->getMemoryBase();
|
| + if (NULL != memory) {
|
| + return new SkMemoryStream(memory, length);
|
| + }
|
| +
|
| + SkAutoTMalloc<uint8_t> allocMemory(length);
|
| stream->rewind();
|
| + if (length == stream->read(allocMemory.get(), length)) {
|
| + return new SkMemoryStream(allocMemory.detach(), length);
|
| + }
|
| +
|
| + stream->rewind();
|
| stream->ref();
|
| - // should have been provided by CreateFromStream()
|
| - *ttcIndex = 0;
|
| } else {
|
| SkAutoTUnref<SkFontConfigInterface> fci(RefFCI());
|
| if (NULL == fci.get()) {
|
|
|