Closed Bug 533313 Opened 16 years ago Closed 15 years ago

orkinHeap::Alloc doesn't handle oom (_CxxThrowException) crash in std::bad_alloc after running for a few minutes - news related

Categories

(MailNews Core :: Database, defect)

1.9.1 Branch
x86
Windows 7
defect
Not set
critical

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 204143

People

(Reporter: nikb, Unassigned)

Details

(Keywords: crash)

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Build Identifier: A few minutes after startup, Thunderbird 3.0 RC2 will begin allocating memory until it bumps up against 2GB, at which point it crashes. The CrashReporter tool complains that it cannot send the report. All plugins/add-ons have been removed and this error occurs even in safe mode. Reproducible: Always Steps to Reproduce: 1. Start Thunderbird 3 RC2 2. Wait Actual Results: Thunderbird crashed. The Mozilla CrashReporter tool came up, but was unable to send a crash report. I attached TBird with Visual Studio, and waited until it crashed. "Unhandled exception at 0x76f898f6 in thunderbird.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x003af134." I will try to grab a call stack and update this bug report.
Keywords: crash
Version: unspecified → Trunk
I just used the mozilla symbol server to get the call stack of the crash in question. Sorry for the weird line-wrapping. > KernelBase.dll!_RaiseException@16() + 0x58 bytes mozcrt19.dll!_CxxThrowException(void * pExceptionObject=0x0100f1ec, const _s__ThrowInfo * pThrowInfo=0x6b39ba44) Line 161 mozcrt19.dll!operator new(unsigned int size=113244) Line 61 thunderbird.exe!orkinHeap::Alloc(nsIMdbEnv * mev=0x0531da38, unsigned int inSize=113244, void * * outBlock=0x0100f224) Line 91 thunderbird.exe!morkZone::zone_new_hunk(morkEnv * ev=0x0531da10, unsigned int inSize=113236) Line 267 thunderbird.exe!morkZone::zone_new_chip(morkEnv * ev=0x0531da10, unsigned int inSize=113236) Line 312 thunderbird.exe!morkZone::ZoneNewChip(morkEnv * ev=0x0531da10, unsigned int inSize=113235) Line 359 + 0xc bytes thunderbird.exe!morkPool::NewAnonAtom(morkEnv * ev=0x0531da10, const morkBuf & inBuf={...}, unsigned int inForm=0, morkZone * ioZone=0x050b40ec) Line 466 + 0xc bytes thunderbird.exe!morkStore::YarnToAtom(morkEnv * ev=0x03e37640, const mdbYarn * inYarn=0x00000000, int createIfMissing=1) Line 733 + 0x14 bytes thunderbird.exe!morkBuilder::OnValue(morkEnv * ev=0x0531da10, const morkSpan & inSpan={...}, const morkBuf & inBuf={...}) Line 856 thunderbird.exe!morkParser::ReadCell(morkEnv * ev=0x0000003d) Line 593 thunderbird.exe!morkParser::ReadRow(morkEnv * ev=0x0531da00, int c=91) Line 677 + 0x8 bytes thunderbird.exe!morkParser::ReadContent(morkEnv * ev=0x0531da10, unsigned char inInsideGroup='') Line 1428 thunderbird.exe!morkParser::ReadGroup(morkEnv * mev=0x6b852f27) Line 1222 thunderbird.exe!morkParser::ReadAt(morkEnv * ev=0x0531da10, unsigned char inInsideGroup=0) Line 1254 thunderbird.exe!morkParser::ReadContent(morkEnv * ev=0x0531da10, unsigned char inInsideGroup=0) Line 1439 + 0xc bytes thunderbird.exe!morkParser::OnPortState(morkEnv * ev=0x0531da10) Line 1473 + 0xa bytes thunderbird.exe!morkParser::ParseLoop(morkEnv * ev=0x0531da10) Line 1531 + 0x8 bytes thunderbird.exe!morkParser::ParseMore(morkEnv * ev=0x0531da10, int * outPos=0x0100f3c8, unsigned char * outDone=0x02ac9c78, unsigned char * outBroken=0x02ac9c79) Line 1571 thunderbird.exe!morkThumb::DoMore_OpenFileStore(morkEnv * ev=0x0531da10) Line 479 thunderbird.exe!morkThumb::DoMore(morkEnv * ev=0x0531da10, unsigned int * outTotal=0x0100f480, unsigned int * outCurrent=0x0100f488, unsigned char * outDone=0x0100f4a3, unsigned char * outBroken=0x0100f4a7) Line 402 thunderbird.exe!morkThumb::DoMore(nsIMdbEnv * mev=0x0531da38, unsigned int * outTotal=0x0100f480, unsigned int * outCurrent=0x0100f488, unsigned char * outDone=0x0100f4a3, unsigned char * outBroken=0x0100f4a7) Line 194 thunderbird.exe!nsMsgDatabase::OpenMDB(const char * dbName=0x00a99ee8, int create=0) Line 1141 + 0x1b bytes thunderbird.exe!nsMsgDatabase::Open(nsILocalFile * aFolderName=0x02ac9b80, int aCreate=0, int aLeaveInvalidDB=0) Line 1017 + 0x10 bytes thunderbird.exe!nsMsgDBService::OpenFolderDB(nsIMsgFolder * aFolder=0x0697b040, int aLeaveInvalidDB=0, nsIMsgDatabase * * _retval=0x0697b054) Line 142 thunderbird.exe!nsMsgNewsFolder::GetDatabase() Line 299 thunderbird.exe!nsMsgDBFolder::ApplyRetentionSettings(int deleteViaFolder=0) Line 4720 + 0x5 bytes thunderbird.exe!nsMsgNewsFolder::ApplyRetentionSettings() Line 1855 thunderbird.exe!nsMsgPurgeService::PerformPurge() Line 252 xpcom_core.dll!nsTimerImpl::Fire() Line 420 + 0x6 bytes xpcom_core.dll!nsTimerEvent::Run() Line 514 xpcom_core.dll!nsThread::ProcessNextEvent(int mayWait=1, int * result=0x0100f878) Line 522 xpcom_core.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x00000001, int mayWait=1) Line 236 + 0xd bytes thunderbird.exe!nsBaseAppShell::Run() Line 170 + 0x9 bytes thunderbird.exe!nsAppStartup::Run() Line 194 thunderbird.exe!XRE_main(int argc=1, char * * argv=0x02a1c090, const nsXREAppData * aAppData=0x02a163c0) Line 3323 thunderbird.exe!NS_internal_main(int argc=1, char * * argv=0x02a1c090) Line 104 thunderbird.exe!wmain(int argc=44155024, wchar_t * * argv=0x02a1a700) Line 112 thunderbird.exe!__tmainCRTStartup() Line 591 + 0x19 bytes Incidentally, it appears that CrashReporter fails because with all 2GB of the memory available to userspace applications taken up, there isn't anything left to actually let us write the minidump file out.
Version: Trunk → unspecified
(And by that of course, the 2GB available to thunderbird.exe; the part of breakpad running inside tb can't write the minidump before launching CrashReporter)
Component: General → Database
Product: Thunderbird → MailNews Core
QA Contact: general → database
Summary: crash in std::bad_alloc after running for a few minutes → orkinHeap::Alloc doesn't handle oom (_CxxThrowException) crash in std::bad_alloc after running for a few minutes
(ignoring the lack of crash report ATM) do you crash if started in safe mode? if you start with a new profile and specific accounts not defined? (for example news)
Version: unspecified → 1.9.1 Branch
I'm not sure what you mean "ignoring the lack of crash report." As I explained, FF bumps up against the 2GB per-process memory limit, so the in-process component that tries to write out the mini-dump before calling Crash Reporter fails. My first thought was that some plugin was the fault, so I disabled all of them and the crashes continued. To answer your first question, it did crash while starting in safe mode. As for the second question I did not try to do this with a new profile. However I suspect that would have worked because before reading this thread and on a hunch from the call stack I deleted my News account and the problem went away.
(In reply to comment #4) > > As for the second question I did not try to do this with a new profile. However > I suspect that would have worked because before reading this thread and on a > hunch from the call stack I deleted my News account and the problem went away. so a bad news file?
Summary: orkinHeap::Alloc doesn't handle oom (_CxxThrowException) crash in std::bad_alloc after running for a few minutes → orkinHeap::Alloc doesn't handle oom (_CxxThrowException) crash in std::bad_alloc after running for a few minutes - news related
I'm marking this as "RESOLVED/FIXED" after Wayne Mery asked me to close this. I don't necessarily know that it's been resolved, since I no longer use TB for news. However, I'm pretty sure that the secondary bug here, namely CrashReporter itself crashing when the process has exhausted its 2GB user-mode memory space, still lurks.
Status: UNCONFIRMED → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
bug 204143 crash, orkinHeap::Alloc uses new and throws on failure, oom the crashreporter crashing in OOM situations is being dealt with by Ted in various bugs
Resolution: FIXED → DUPLICATE
You need to log in before you can comment on or make changes to this bug.