diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp index f700791baf8dc..bf18d558a55c9 100644 --- a/core/jni/android/graphics/BitmapRegionDecoder.cpp +++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp @@ -65,6 +65,7 @@ static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { } } data = (char*)sk_realloc_throw(data, streamLen); + SkMemoryStream* streamMem = new SkMemoryStream(); streamMem->setMemoryOwned(data, streamLen); return streamMem; @@ -133,6 +134,12 @@ static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, } stream = fdStream; } else { + /* Restore our offset when we leave, so we can be called more than once + with the same descriptor. This is only required if we didn't dup the + file descriptor, but it is OK to do it all the time. + */ + AutoFDSeek as(descriptor); + SkFDStream* fdStream = new SkFDStream(descriptor, false); if (!fdStream->isValid()) { fdStream->unref(); @@ -142,12 +149,6 @@ static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, fdStream->unref(); } - /* Restore our offset when we leave, so we can be called more than once - with the same descriptor. This is only required if we didn't dup the - file descriptor, but it is OK to do it all the time. - */ - AutoFDSeek as(descriptor); - return doBuildTileIndex(env, stream); }