Need help with temporary files

Matúš Kukan matus.kukan at gmail.com
Tue Jul 21 13:41:45 PDT 2015


Hi there,

I am working on a bug around saving big file in Writer:
https://bugs.documentfoundation.org/show_bug.cgi?id=88314

The problem seems to be we deflate streams in parallel and run out of memory.
I thought there are temporary files used for deflating since
f92183833fa569006602ac7e93c906d2094e0d4d but I see this:

#2  0xb73c9e13 in __GI_abort () at abort.c:90
#3  0xb73c12c7 in __assert_fail_base (fmt=0xb7509564 "%s%s%s:%u:
%s%sAssertion `%s' failed.\n%n",
    assertion=assertion at entry=0xb462e257 <.L.str31> "pBuf &&
\"Possibly Reallocate failed\"",
    file=file at entry=0xb462df3b <.L.str13>
"/home/matus/git/dbgutil/tools/source/stream/stream.cxx",
line=line at entry=1828,
    function=function at entry=0xb462e27c
<.L__PRETTY_FUNCTION__._ZN14SvMemoryStream7PutDataEPKvm> "virtual
sal_Size SvMemoryStream::PutData(const void *, sal_Size)") at
assert.c:92
#4  0xb73c1377 in __GI___assert_fail (assertion=0xb462e257 <.L.str31>
"pBuf && \"Possibly Reallocate failed\"",
    file=0xb462df3b <.L.str13>
"/home/matus/git/dbgutil/tools/source/stream/stream.cxx", line=1828,
    function=0xb462e27c
<.L__PRETTY_FUNCTION__._ZN14SvMemoryStream7PutDataEPKvm> "virtual
sal_Size SvMemoryStream::PutData(const void *, sal_Size)")
    at assert.c:101
#5  0xb4614d46 in SvMemoryStream::PutData (this=0x6168b908,
pData=0x61b7f5e8, nCount=0)
    at /home/matus/git/dbgutil/tools/source/stream/stream.cxx:1828
#6  0xb460da7a in SvStream::Write (this=0x6168b908, pData=0x61b7f5e8,
nCount=644) at /home/matus/git/dbgutil/tools/source/stream/stream.cxx:1359
#7  0xb437b197 in OTempFileService::writeBytes (this=0x6168b8a8,
aData=uno::Sequence of length 644 = {...})
    at /home/matus/git/dbgutil/unotools/source/ucbhelper/xtempfile.cxx:268
#8  0xb437b369 in non-virtual thunk to
OTempFileService::writeBytes(com::sun::star::uno::Sequence<signed
char> const&) ()
    at /home/matus/git/dbgutil/unotools/source/ucbhelper/xtempfile.cxx:272
#9  0xab02a77e in ZipOutputEntry::doDeflate (this=0x61a7e148) at
/home/matus/git/dbgutil/package/source/zipapi/ZipOutputEntry.cxx:180
#10 0xab02a0d6 in ZipOutputEntry::closeEntry (this=0x61a7e148) at
/home/matus/git/dbgutil/package/source/zipapi/ZipOutputEntry.cxx:90
#11 0xab0833eb in deflateZipEntry (pZipEntry=0x61a7e148,
xInStream=uno::Reference to (OInputCompStream *) 0xd56a3b4)
    at /home/matus/git/dbgutil/package/source/zippackage/ZipPackageStream.cxx:456
#12 0xab08b07c in DeflateThread::doWork (this=0x61983c00) at
/home/matus/git/dbgutil/package/source/zippackage/ZipPackageStream.cxx:474

Does that mean css::io::TempFile UNO service I use in
package/source/zipapi/ZipOutputEntry.cxx provides in fact memory
stream?
OTempFileService::OTempFileService has
  mpTempFile = new ::utl::TempFile;

and TempFile::GetStream has
     if (!aName.isEmpty())
          pStream = new SvFileStream(aName, eMode);
    else
          pStream = new SvMemoryStream(NULL, 0, eMode);

Should we fix that?
And/Or is there another way to get file stream?
package/ does not have many dependencies, so I would not like to
introduce some new.

Thanks,
All the best,

Matus


More information about the LibreOffice mailing list