Changeset 210501 in webkit
- Timestamp:
- Jan 9, 2017 4:12:14 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r210499 r210501 1 2017-01-09 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] WebProcess from WebKitGtk+ 2.15.2 SIGSEGVs in std::unique_ptr<SoupBuffer, WTF::GPtrDeleter<SoupBuffer> >::get() const () at /usr/include/c++/6/bits/unique_ptr.h:305 4 https://bugs.webkit.org/show_bug.cgi?id=165848 5 6 Reviewed by Michael Catanzaro. 7 8 In r208881 several locks were added to ImageDecoder to prevent frameBufferAtIndex() from being called by multiple 9 threads at the same time, but I forgot isSizeAvailable() also calls frameBufferAtIndex(). However, what we 10 really need to protect is the GIFImageDecoder, to never allow decoding from more than one thread at the same 11 time. This patch reverts r208881 and adds a lock to GIFImageDecoder::decode() instead. 12 13 * platform/image-decoders/ImageDecoder.cpp: 14 (WebCore::ImageDecoder::frameIsCompleteAtIndex): 15 (WebCore::ImageDecoder::frameDurationAtIndex): 16 (WebCore::ImageDecoder::createFrameImageAtIndex): 17 * platform/image-decoders/ImageDecoder.h: 18 * platform/image-decoders/gif/GIFImageDecoder.cpp: 19 (WebCore::GIFImageDecoder::decode): 20 * platform/image-decoders/gif/GIFImageDecoder.h: 21 1 22 2017-01-09 Alejandro G. Castro <alex@igalia.com> 2 23 -
trunk/Source/WebCore/platform/image-decoders/ImageDecoder.cpp
r208881 r210501 171 171 bool ImageDecoder::frameIsCompleteAtIndex(size_t index) 172 172 { 173 LockHolder locker(m_lock);174 173 ImageFrame* buffer = frameBufferAtIndex(index); 175 174 return buffer && buffer->isComplete(); … … 195 194 float ImageDecoder::frameDurationAtIndex(size_t index) 196 195 { 197 LockHolder locker(m_lock);198 196 ImageFrame* buffer = frameBufferAtIndex(index); 199 197 if (!buffer || buffer->isEmpty()) … … 216 214 return nullptr; 217 215 218 LockHolder locker(m_lock);219 216 ImageFrame* buffer = frameBufferAtIndex(index); 220 217 if (!buffer || buffer->isEmpty() || !buffer->hasBackingStore()) -
trunk/Source/WebCore/platform/image-decoders/ImageDecoder.h
r208985 r210501 35 35 #include "SharedBuffer.h" 36 36 #include <wtf/Assertions.h> 37 #include <wtf/Lock.h>38 37 #include <wtf/Optional.h> 39 38 #include <wtf/RefPtr.h> … … 216 215 bool m_isAllDataReceived { false }; 217 216 bool m_failed { false }; 218 Lock m_lock;219 217 }; 220 218 -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
r206481 r210501 307 307 return; 308 308 309 LockHolder locker(m_decodeLock); 309 310 if (!m_reader) { 310 311 m_reader = std::make_unique<GIFImageReader>(this); -
trunk/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
r206481 r210501 27 27 28 28 #include "ImageDecoder.h" 29 #include <wtf/Lock.h> 29 30 30 31 class GIFImageReader; … … 74 75 mutable RepetitionCount m_repetitionCount { RepetitionCountOnce }; 75 76 std::unique_ptr<GIFImageReader> m_reader; 77 Lock m_decodeLock; 76 78 }; 77 79
Note: See TracChangeset
for help on using the changeset viewer.