зеркало из https://github.com/mozilla/gecko-dev.git
4ebf5b4364
In the current code there are 3 main issues: 1. nsFileStream is not really thread-safe. There is nothing to protect the internal members and we see crashes. 2. nsPipeInputStream doesn't implement ::Seek() method and that caused issues in devtools when a nsHttpChannel sends POST data using a pipe. In order to fix this, bug 1494176 added a check in nsHttpChannel: if the stream doesn't implement ::Seek(), let's clone it. This was an hack around nsPipeInputStream, and it's bad. 3. When nsHttpChannel sends POST data using a file stream, nsFileStream does I/O on main-thread because of the issue 2. Plus, ::Seek() is called on the main-thread causing issue 1. Note that nsPipeInputStream implements only ::Tell(), of the nsISeekableStream methods. It doesn't implement ::Seek() and it doesn't implement ::SetEOF(). With this patch I want to fix point 2 and point 3 (and consequentially issue 1 - but we need a separate fix for it - follow up). The patch does: 1. it splits nsISeekableStream in 2 interfaces: nsITellableStream and nsISeekableStream. 2. nsPipeInputStream implements only nsITellableStream. Doing this, we don't need the ::Seek() check for point 2 in nsHttpChannel: a simple QI check is enough. 3. Because we don't call ::Seek() in nsHttpChannel, nsFileStream doesn't do I/O on the main-thread, and we don't crash doing so. |
||
---|---|---|
.. | ||
AppCacheStorage.cpp | ||
AppCacheStorage.h | ||
CacheEntry.cpp | ||
CacheEntry.h | ||
CacheFile.cpp | ||
CacheFile.h | ||
CacheFileChunk.cpp | ||
CacheFileChunk.h | ||
CacheFileContextEvictor.cpp | ||
CacheFileContextEvictor.h | ||
CacheFileIOManager.cpp | ||
CacheFileIOManager.h | ||
CacheFileInputStream.cpp | ||
CacheFileInputStream.h | ||
CacheFileMetadata.cpp | ||
CacheFileMetadata.h | ||
CacheFileOutputStream.cpp | ||
CacheFileOutputStream.h | ||
CacheFileUtils.cpp | ||
CacheFileUtils.h | ||
CacheHashUtils.cpp | ||
CacheHashUtils.h | ||
CacheIOThread.cpp | ||
CacheIOThread.h | ||
CacheIndex.cpp | ||
CacheIndex.h | ||
CacheIndexContextIterator.cpp | ||
CacheIndexContextIterator.h | ||
CacheIndexIterator.cpp | ||
CacheIndexIterator.h | ||
CacheLog.cpp | ||
CacheLog.h | ||
CacheObserver.cpp | ||
CacheObserver.h | ||
CacheStorage.cpp | ||
CacheStorage.h | ||
CacheStorageService.cpp | ||
CacheStorageService.h | ||
OldWrappers.cpp | ||
OldWrappers.h | ||
moz.build | ||
nsICacheEntry.idl | ||
nsICacheEntryDoomCallback.idl | ||
nsICacheEntryOpenCallback.idl | ||
nsICacheStorage.idl | ||
nsICacheStorageService.idl | ||
nsICacheStorageVisitor.idl | ||
nsICacheTesting.idl |