Bug 1175975 - Null crash fix in ProcessHangMonitor (r=jimm)

This commit is contained in:
Bill McCloskey
2015-06-18 13:10:46 -07:00
parent f76479a4cb
commit 52dd1aa5a4
4 changed files with 31 additions and 16 deletions

View File

@@ -359,10 +359,9 @@ mozilla::plugins::TerminatePlugin(uint32_t aPluginId, const nsString& aBrowserDu
if (!pluginTag || !pluginTag->mPlugin) {
return;
}
nsAutoString dumpId(aBrowserDumpId);
nsRefPtr<nsNPAPIPlugin> plugin = pluginTag->mPlugin;
PluginModuleChromeParent* chromeParent = static_cast<PluginModuleChromeParent*>(plugin->GetLibrary());
chromeParent->TerminateChildProcess(MessageLoop::current(), &dumpId);
chromeParent->TerminateChildProcess(MessageLoop::current(), aBrowserDumpId);
}
/* static */ PluginLibrary*
@@ -1154,8 +1153,7 @@ PluginModuleChromeParent::ShouldContinueFromReplyTimeout()
// original plugin hang behaviour and kill the plugin container.
FinishHangUI();
#endif // XP_WIN
nsString dummy;
TerminateChildProcess(MessageLoop::current(), &dummy);
TerminateChildProcess(MessageLoop::current(), EmptyString());
GetIPCChannel()->CloseWithTimeout();
return false;
}
@@ -1179,7 +1177,7 @@ PluginModuleContentParent::OnExitedSyncSend()
void
PluginModuleChromeParent::TerminateChildProcess(MessageLoop* aMsgLoop,
nsAString* aBrowserDumpId)
const nsAString& aBrowserDumpId)
{
#ifdef MOZ_CRASHREPORTER
#ifdef XP_WIN
@@ -1215,8 +1213,8 @@ PluginModuleChromeParent::TerminateChildProcess(MessageLoop* aMsgLoop,
// since the posted message will trash our browser stack state.
bool exists;
nsCOMPtr<nsIFile> browserDumpFile;
if (aBrowserDumpId && !aBrowserDumpId->IsEmpty() &&
CrashReporter::GetMinidumpForID(*aBrowserDumpId, getter_AddRefs(browserDumpFile)) &&
if (!aBrowserDumpId.IsEmpty() &&
CrashReporter::GetMinidumpForID(aBrowserDumpId, getter_AddRefs(browserDumpFile)) &&
browserDumpFile &&
NS_SUCCEEDED(browserDumpFile->Exists(&exists)) && exists)
{
@@ -1226,7 +1224,7 @@ PluginModuleChromeParent::TerminateChildProcess(MessageLoop* aMsgLoop,
NS_LITERAL_CSTRING("browser"));
if (!reportsReady) {
browserDumpFile = nullptr;
CrashReporter::DeleteMinidumpFilesForID(*aBrowserDumpId);
CrashReporter::DeleteMinidumpFilesForID(aBrowserDumpId);
}
}