浏览代码

Clone file handle for concurrent zip access.

OTHGMars 4 年之前
父节点
当前提交
e808fc4407
共有 2 个文件被更改,包括 4 次插入1 次删除
  1. 1 1
      Engine/source/core/util/zip/zipCryptStream.cpp
  2. 3 0
      Engine/source/core/util/zip/zipSubStream.cpp

+ 1 - 1
Engine/source/core/util/zip/zipCryptStream.cpp

@@ -85,7 +85,7 @@ void ZipCryptRStream::setPassword(const char *password)
 
 
 bool ZipCryptRStream::attachStream(Stream* io_pSlaveStream)
 bool ZipCryptRStream::attachStream(Stream* io_pSlaveStream)
 {
 {
-   mStream = io_pSlaveStream;
+   mStream = io_pSlaveStream->clone();
    mStreamStartPos = mStream->getPosition();
    mStreamStartPos = mStream->getPosition();
 
 
    // [tom, 12/20/2005] Encrypted zip files have an extra 12 bytes
    // [tom, 12/20/2005] Encrypted zip files have an extra 12 bytes

+ 3 - 0
Engine/source/core/util/zip/zipSubStream.cpp

@@ -58,7 +58,10 @@ bool ZipSubRStream::attachStream(Stream* io_pSlaveStream)
    AssertFatal(io_pSlaveStream != NULL, "NULL Slave stream?");
    AssertFatal(io_pSlaveStream != NULL, "NULL Slave stream?");
    AssertFatal(m_pStream == NULL,       "Already attached!");
    AssertFatal(m_pStream == NULL,       "Already attached!");
 
 
+   m_pStream          = io_pSlaveStream->clone();
+   if (!m_pStream)
    m_pStream          = io_pSlaveStream;
    m_pStream          = io_pSlaveStream;
+
    m_originalSlavePosition = io_pSlaveStream->getPosition();
    m_originalSlavePosition = io_pSlaveStream->getPosition();
    m_uncompressedSize = 0;
    m_uncompressedSize = 0;
    m_currentPosition  = 0;
    m_currentPosition  = 0;