From c60ed397cc8ba17829de1f6170be14a180fe246f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Wed, 2 Jan 2013 21:04:10 -0500 Subject: [PATCH] Bug 826029 - Assertion in mozPoisonWriteMac due to Mac camera code trying to write a defaults file on exit | Assertion failure: ok, at ../../../xpcom/build/mozPoisonWriteMac.cpp:90. r=ehsan. --HG-- extra : rebase_source : 511835e6d24a0b58b5c9eb684b258456b7a7019e --- browser/app/nsBrowserApp.cpp | 10 ++++++++++ toolkit/xre/nsAppRunner.cpp | 5 +++++ xpcom/build/nsXULAppAPI.h | 2 ++ 3 files changed, 17 insertions(+) diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp index 95f16a265f3..db85b328de2 100644 --- a/browser/app/nsBrowserApp.cpp +++ b/browser/app/nsBrowserApp.cpp @@ -107,6 +107,7 @@ XRE_SetupDllBlocklistType XRE_SetupDllBlocklist; XRE_TelemetryAccumulateType XRE_TelemetryAccumulate; XRE_StartupTimelineRecordType XRE_StartupTimelineRecord; XRE_mainType XRE_main; +XRE_DisableWritePoisoningType XRE_DisableWritePoisoning; static const nsDynamicFunctionLoad kXULFuncs[] = { { "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath }, @@ -118,6 +119,7 @@ static const nsDynamicFunctionLoad kXULFuncs[] = { { "XRE_TelemetryAccumulate", (NSFuncPtr*) &XRE_TelemetryAccumulate }, { "XRE_StartupTimelineRecord", (NSFuncPtr*) &XRE_StartupTimelineRecord }, { "XRE_main", (NSFuncPtr*) &XRE_main }, + { "XRE_DisableWritePoisoning", (NSFuncPtr*) &XRE_DisableWritePoisoning }, { nullptr, nullptr } }; @@ -280,5 +282,13 @@ int main(int argc, char* argv[]) } XPCOMGlueShutdown(); + + // Allow writes again. While we would like to catch writes from static + // destructors to allow early exits to use _exit, we know that there is + // at least one such write that we don't control (see bug 826029). For + // now we enables write again and early exits will have to use exit instead + // of _exit. + XRE_DisableWritePoisoning(); + return result; } diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 0eded02be32..7665de21449 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -4080,6 +4080,11 @@ XRE_mainMetro(int argc, char* argv[], const nsXREAppData* aAppData) void SetWindowsEnvironment(WindowsEnvironmentType aEnvID); #endif // MOZ_METRO || !defined(XP_WIN) +void +XRE_DisableWritePoisoning(void) { + mozilla::DisableWritePoisoning(); +} + int XRE_main(int argc, char* argv[], const nsXREAppData* aAppData, uint32_t aFlags) { diff --git a/xpcom/build/nsXULAppAPI.h b/xpcom/build/nsXULAppAPI.h index 92738f34dab..c8d338ba7dc 100644 --- a/xpcom/build/nsXULAppAPI.h +++ b/xpcom/build/nsXULAppAPI.h @@ -452,6 +452,8 @@ XRE_API(void, XRE_API(void, XRE_InitOmnijar, (nsIFile* greOmni, nsIFile* appOmni)) +XRE_API(void, + XRE_DisableWritePoisoning, (void)) #ifdef XP_WIN /**