Commit Graph

402 Commits

Author SHA1 Message Date
Sylvestre Ledru
1ad0cac654 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-05 21:41:42 +00:00
Nicholas Nethercote
f67e27044b Bug 1541269 - Make OnChildProcessDumpRequested() the same on all platforms. r=gsvelto
Differential Revision: https://phabricator.services.mozilla.com/D25884
2019-04-03 18:54:04 +00:00
Nicholas Nethercote
e2bb468069 Bug 1535226 - Remove uses of XP_WIN32 in Gecko. r=glandium
The definitions can't be entirely removed yet because NSS still needs them.

Differential Revision: https://phabricator.services.mozilla.com/D23454
2019-03-21 01:28:50 +00:00
Jed Davis
811e9fc4c5 Bug 1472589 - Fix parent process crash reporting in the Snap package environment. r=ted,jlorenzo
1. The unsetting of LD_LIBRARY_PATH is removed, because it's no longer
necessary and interferes with environments where it's necessary to find
"system" libraries like GTK; see bug 1472589 comment #1 through #4.

2. The Snap package manifest adds a dependency on the libcurl package,
so that the crash reporter can send the report.  This uses the GnuTLS
variant because we're already pulling in GnuTLS as a dependency of some
other packages (FFmpeg and CUPS, but also the non-GnuTLS cURL packages
depend on it anyway via OpenLDAP).

Differential Revision: https://phabricator.services.mozilla.com/D18625
2019-02-11 13:49:35 +00:00
David Major
ac5bda0b00 No bug - clean up redundant ifdef in nsExceptionHandler.cpp. DONTBUILD 2019-02-07 10:23:34 -05:00
Ehsan Akhgari
498e2df734 Bug 1521000 - Part 2: Adjust our clang-format rules to include spaces after the hash for nested preprocessor directives r=sylvestre
# ignore-this-changeset
2019-01-18 10:16:18 +01:00
David Major
868ee6a0da Bug 1484835 - Extend the Windows JIT unwind handler to ARM64 r=luke
Because the .xdata format on ARM64 can only encode sizes up to 1M (much too small for our JIT code regions), we register a function table callback to provide RUNTIME_FUNCTIONs at runtime. Windows doesn't seem to care about the size fields on RUNTIME_FUNCTIONs that are created in this way, so the same RUNTIME_FUNCTION can work for any address in the region. We'll set up a generic one in RegisterExecutableMemory and the callback can just return a pointer to it.

Differential Revision: https://phabricator.services.mozilla.com/D16261
2019-01-14 14:06:24 +00:00
Nathan Froyd
fd06845363 Bug 1518922 - part 2 - remove GetChildProcessTmpDir; r=gsvelto
After part 1, this function and the code associated with it is no longer
used.
2019-01-10 16:13:37 -05:00
Jed Davis
ff2f779960 Bug 1487287 - Fix thread-safety of crash reporter pid map. r=gsvelto
Depends on D8945

Differential Revision: https://phabricator.services.mozilla.com/D15886
2019-01-08 23:53:37 +00:00
Gabriele Svelto
7f65d2d79b Bug 1517730 - Enable the crash reporter by default on Windows/AArch64 builds r=ted
Differential Revision: https://phabricator.services.mozilla.com/D15763
2019-01-09 22:39:22 +00:00
Mike Hommey
b8d06ae92d Bug 1514435 - Always hook rust OOM handler. r=froydnj
And do that as early as possible.

Differential Revision: https://phabricator.services.mozilla.com/D14666
2018-12-15 17:45:17 +00:00
Mike Hommey
d4ab684d38 Bug 1514209 - Enable the crashreporter code on Windows arm64 builds. r=froydnj
But keep the crashreporter disabled at runtime because it doesn't work
yet.

This has the side effect of creating the artifacts with the
crashreporter symbols and pdbs.

Differential Revision: https://phabricator.services.mozilla.com/D14550
2018-12-14 14:50:30 +00:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Mike Hommey
0506ab74a3 Bug 1496503 - Install the rust panic hook early. r=froydnj
Previously, our panic hook was only really useful when the crash
reporter is used, because all it did apart from calling rust's default
panic handler was to keep a pointer to the panic message for the crash
reporter.

Now that it just redirects to the Gecko crash code, it doesn't need to
be tied to the crash reporter. In fact, to ensure it's consistently used
in all cases, we ought to install it early on. Use a static initializer
for that.

Depends on D11720

Depends on D11720

Differential Revision: https://phabricator.services.mozilla.com/D11721
2018-11-14 22:35:35 +00:00
Mike Hommey
33d7b980e2 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-14 22:35:33 +00:00
Dorel Luca
020b2bdbe9 Backed out 4 changesets (bug 1496503) for Valgrind bustage. CLOSED TREE
Backed out changeset 033a89b3e00d (bug 1496503)
Backed out changeset a0f255b660ce (bug 1496503)
Backed out changeset 963d8ac1cfee (bug 1496503)
Backed out changeset 43e44f8439ec (bug 1496503)
2018-11-14 19:00:29 +02:00
Mike Hommey
57cc980a32 Bug 1496503 - Install the rust panic hook early. r=froydnj
Previously, our panic hook was only really useful when the crash
reporter is used, because all it did apart from calling rust's default
panic handler was to keep a pointer to the panic message for the crash
reporter.

Now that it just redirects to the Gecko crash code, it doesn't need to
be tied to the crash reporter. In fact, to ensure it's consistently used
in all cases, we ought to install it early on. Use a static initializer
for that.

Depends on D11720

Differential Revision: https://phabricator.services.mozilla.com/D11721
2018-11-14 08:46:07 +00:00
Mike Hommey
67e2661ca5 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-14 08:46:51 +00:00
Coroiu Cristina
e770c03004 Backed out 4 changesets (bug 1496503) for xpcshell failures at toolkit/crashreporter/test/unit/test_crash_rust_panic.js on a CLOSED TREE
Backed out changeset cfeee3d5ed6a (bug 1496503)
Backed out changeset 164a5a49fd25 (bug 1496503)
Backed out changeset d0b6c1fc149d (bug 1496503)
Backed out changeset bfb4ee856c71 (bug 1496503)
2018-11-14 09:00:06 +02:00
Mike Hommey
72bc3d7929 Bug 1496503 - Install the rust panic hook early. r=froydnj
Previously, our panic hook was only really useful when the crash
reporter is used, because all it did apart from calling rust's default
panic handler was to keep a pointer to the panic message for the crash
reporter.

Now that it just redirects to the Gecko crash code, it doesn't need to
be tied to the crash reporter. In fact, to ensure it's consistently used
in all cases, we ought to install it early on. Use a static initializer
for that.

Depends on D11720

Differential Revision: https://phabricator.services.mozilla.com/D11721
2018-11-13 23:50:37 +00:00
Mike Hommey
41dbba3d42 Bug 1496503 - Change the rust panic hook to delegate to Gecko's crash code. r=froydnj
The current rust panic hook keeps a string for the crash reporter, and
goes on calling the default rust panic hook, which prints out a crash
stack...  when RUST_BOOTSTRAP is set *and* when that works. Notably, on
both mac and Windows, it only really works for local builds, but fails
for debug builds from automation, although on automation itself, we also
do stackwalk from crash minidumps, which alleviates the problem.
Artifact debug builds are affected, though.

More importantly, C++ calls to e.g. MOZ_CRASH have a similar but
different behavior, in that they dump a stack trace on debug builds, by
default (with exceptions, see below for one). The format of those stack
traces is understood by the various fix*stack*py scripts under
tools/rb/, that are used by the various test harnesses both on
automation and locally.

Additionally, the current rust panic hook, as it calls the default rust
panic hook, ends up calling abort() on non-Windows platforms, which ends
up being verbosely redirected to mozalloc_abort per
https://dxr.mozilla.org/mozilla-central/rev/237e4c0633fda8e227b2ab3ab57e417c980a2811/memory/mozalloc/mozalloc_abort.cpp#79
which then calls MOZ_CRASH. Theoretically, /that/ would also print a
stack trace, but doesn't because currently the stack trace printing code
lives in libxul, and MOZ_CRASH only calls it when compiled from
libxul-code, which mozalloc_abort is not part of.

With this change, we make the rust panic handler call back into
MOZ_CRASH directly. This has multiple advantages:
- This is more consistent cross-platforms (Windows is not special
anymore).
- This is more consistent between C++ and rust (stack traces all look
the same, and can all be post-processed by fix*stack*py if need be)
- This is more consistent in behavior, where debug builds will show
those stack traces without caring about environment variables.
- It demangles C++ symbols in rust-initiated stack traces (for some
reason that didn't happen with the rust panic handler)

A few downsides:
- the loss of demangling for some rust symbols.
- the loss of addresses in the stacks, although they're not entirely
useful
- extra empty lines.

The first should be fixable later one. The latter two are arguably
something that should be consistent across C++ and rust, and should be
changed if necessary, independently of this patch.

Depends on D11719

Differential Revision: https://phabricator.services.mozilla.com/D11720
2018-11-13 23:48:40 +00:00
Gabriele Svelto
840a3bfad4 Bug 1505007 - Do not truncate ELF identifiers on Android r=ted
This also refactors the surrounding code for better readability and removes
some duplicate code.

Differential Revision: https://phabricator.services.mozilla.com/D11030
2018-11-09 11:09:03 +00:00
Gabriele Svelto
7894770cdd Bug 1502534 - Add the telemetry session ID to content crash pings r=ted
Differential Revision: https://phabricator.services.mozilla.com/D10313
2018-10-31 10:46:14 +00:00
Gabriele Svelto
30b075ba79 Bug 1390547 - Escape MozCrashReason when writing out a crash report r=ted
Differential Revision: https://phabricator.services.mozilla.com/D7256
2018-10-11 11:15:02 +00:00
Gabriele Svelto
38bdb242ce Bug 1490240 - Fix the remaining compiler warnings in the crash reporter r=ted,glandium
Differential Revision: https://phabricator.services.mozilla.com/D5741
2018-09-26 11:54:34 +00:00
Brindusan Cristian
64aa9d3b43 Backed out changeset 628ebca30ce3 (bug 1490240) for bustages on [Unified_cpp_crashreporter0.obj]. CLOSED TREE 2018-09-24 17:10:58 +03:00
Gabriele Svelto
91ed440bbf Bug 1490240 - Fix the remaining compiler warnings in the crash reporter r=ted,glandium
Differential Revision: https://phabricator.services.mozilla.com/D5741
2018-09-24 13:21:38 +00:00
arthur.iakab
86361c2c8d Backed out changeset 5a566d2d6722 (bug 1490240)for build bustages on Unified_cpp_crashreporter0.obj CLOSED TREE 2018-09-21 15:25:15 +03:00
Gabriele Svelto
d4247940e7 Bug 1490240 - Fix the remaining compiler warnings in the crash reporter r=ted,glandium
Differential Revision: https://phabricator.services.mozilla.com/D5741
2018-09-21 11:38:04 +00:00
Carl Corcoran
2449dd74a6 Bug 1488181: Preload psapi.dll to prevent hangs in the exception handler;r=ted
Differential Revision: https://phabricator.services.mozilla.com/D6361
2018-09-20 09:53:26 +00:00
Gabriele Svelto
ca97ea737e Bug 1463048 - Remove asynchronous minidump generation r=ted
This reverts the changes in bug 1360308, bug 1390143 and bug 1469603. Minidump
generation will now only happen on the main process' main thread which might
lead to hangs but is known to be fairly robust. Asynchronous generation proved
too brittle and enormously increased the complexity of this already
hard-to-read code.

Differential Revision: https://phabricator.services.mozilla.com/D5147
2018-09-17 20:51:45 +00:00
Carl Corcoran
2173fae20d Bug 1372826: Unloaded module information in minidumps no longer restricted to Nightly;r=ted
Differential Revision: https://phabricator.services.mozilla.com/D5145
2018-09-07 16:45:49 +00:00
James Willcox
384ce47976 Bug 1483329 - Add crash handling API to GeckoRuntime r=jchen,esawin 2018-09-11 12:04:08 -05:00
Brian Hackett
36f706214f Bug 1488523 Part 2 - Don't drop delayed crash annotations at startup, r=gsvelto. 2018-09-05 09:23:03 -10:00
Andreea Pavel
3649db4249 Backed out changeset af8353a3ecbc (bug 1463048) for causing Bug 1488827 a=backout 2018-09-05 21:13:13 +03:00
Gabriele Svelto
a4f4d29b92 Bug 1463048 - Invoke the minidump generation callback asynchronsouly r=ted
Differential Revision: https://phabricator.services.mozilla.com/D3837
2018-09-04 15:04:35 +00:00
Carl Corcoran
601eae9fc9 Bug 1467736: Add support for DllBlocklist_Shutdown;r=aklotz
Differential Revision: https://phabricator.services.mozilla.com/D4544
2018-08-29 18:49:49 +00:00
Dave Townsend
67af60ea8f Bug 1484844: Make nsINIParser mutable. r=froydnj
In order to implement profile-per-install we need a mutable INI parser in early
startup. The current one is implemented in JavaScript and thus not available.
This makes the current read-only C++ INI parser mutable and removes the
JavaScript implementation.

It turns out that the two different implementations of nsIINIParserFactory and
nsIINIParser behaved slightly differently but only in ways that the single test
cared about so I've adjusted things a little to make it work.

The existing C++ implementation did not do validity checks on arguments, this
adds that making empty sections and values illegal.

Differential Revision: https://phabricator.services.mozilla.com/D3851
2017-10-12 14:20:57 -07:00
Brian Hackett
f8d2cbeb57 Bug 1481009 Part 3 - Report recording/replaying processes crashes as if they happened in the middleman, r=gsvelto. 2018-08-13 20:46:42 +00:00
Cosmin Sabou
ce1bed14ed Backed out 8 changesets (bug 1481009) for causing devtools crashes @XUL + 0x37bba19. a=backout
Backed out changeset 11ee868c5903 (bug 1481009)
Backed out changeset 4a0c7dd5e1ac (bug 1481009)
Backed out changeset 4e6908123a97 (bug 1481009)
Backed out changeset 6869ea5ebd32 (bug 1481009)
Backed out changeset 85eec9cfc3d9 (bug 1481009)
Backed out changeset f7f4127aa9d8 (bug 1481009)
Backed out changeset 58598aa3cf0c (bug 1481009)
Backed out changeset 1ec7f635f4f3 (bug 1481009)
2018-08-12 14:50:41 +03:00
Brian Hackett
4de30993fe Bug 1481009 Part 3 - Report recording/replaying processes crashes as if they happened in the middleman, r=gsvelto. 2018-08-08 16:45:59 +00:00
Gabriele Svelto
7e6f18cd29 Bug 1348273 - Convert crash annotations into a machine-readable list of constants; r=ted.mielczarek,njn,dholbert,mak,cpearce,mcmanus,froydnj,Dexter,jrmuizel,jchen,jimm,bz,surkov
This introduces the machinery needed to generate crash annotations from a YAML
file. The relevant C++ functions are updated to take a typed enum. JavaScript
calls are unaffected but they will throw if the string argument does not
correspond to one of the known entries in the C++ enum. The existing whitelists
and blacklists of annotations are also generated from the YAML file and all
duplicate code related to them has been consolidated. Once written out to the
.extra file the annotations are converted in string form and are no different
than the existing ones.

All existing annotations have been included in the list (and some obsolete ones
have been removed) and all call sites have been updated including tests where
appropriate.
2018-07-05 15:42:11 +02:00
Petru Lingurar
d596d053b7 Bug 1467461 - Migrate CrashReportingService to JobIntentService. r=snorp
Use the fact that a JobIntentService is still a Service to keep most of the
previous implementation and method of starting CrashReportingService.
On 26+ devices it will be called with "start-foreground-service".
This ensures it can be started even from background and the crash reporting
process would work as before but ActivityManager will post an ANR error to
logcat after 5 seconds because we aren't calling Service.startForeground()
(which would mean a user visible notification).

Will use different Job Ids depending on if the app is Firefox Release or
Firefox Beta.
The Job Id will be passed to GeckoThread when first initializing and then be
made available to CrashHandler and nsExceptionHandler.cpp to be sent in the
Intent that starts the CrashReporterService.

MozReview-Commit-ID: GATl6Waa9St
2018-07-02 17:32:10 +03:00
Aaron Klotz
bf3ffb429e Bug 1460022: Part 10 - Update crash reporter to work with revised DLL interceptor interface; r=dmajor 2018-06-27 11:51:40 -06:00
shindli
3ffa44b530 Backed out 13 changesets (bug 1460022) for bustages in :/build/build/src/mozglue/tests/interceptor/TestDllInterceptor.cpp(113) on a CLOSED TREE
Backed out changeset b798c3689bbf (bug 1460022)
Backed out changeset c3b3b854affd (bug 1460022)
Backed out changeset ecb1b6fd3134 (bug 1460022)
Backed out changeset 91fed649dd5a (bug 1460022)
Backed out changeset be7032cddad2 (bug 1460022)
Backed out changeset d4a036b976e6 (bug 1460022)
Backed out changeset 5f3dfde41e38 (bug 1460022)
Backed out changeset a16486a6f685 (bug 1460022)
Backed out changeset 69eacc5c3ab8 (bug 1460022)
Backed out changeset 34aa7c29b31e (bug 1460022)
Backed out changeset 00b20c0a7637 (bug 1460022)
Backed out changeset b8e8aea4a01f (bug 1460022)
Backed out changeset 15822d9848d8 (bug 1460022)
2018-07-04 03:37:11 +03:00
Aaron Klotz
cd02df2da8 Bug 1460022: Part 10 - Update crash reporter to work with revised DLL interceptor interface; r=dmajor 2018-06-27 11:51:40 -06:00
shindli
3c15ba6c22 Backed out 13 changesets (bug 1460022) for bustages in builds/worker/workspace/build/src/dom/plugins/ipc/FunctionHook.h💯24 on a CLOSED TREE
Backed out changeset 0734142a3f35 (bug 1460022)
Backed out changeset 18fbfa7ca685 (bug 1460022)
Backed out changeset 2df129bd5692 (bug 1460022)
Backed out changeset 02a7ed68933f (bug 1460022)
Backed out changeset 221137d1c2de (bug 1460022)
Backed out changeset 9cb0b7a15402 (bug 1460022)
Backed out changeset 18f8f85c0307 (bug 1460022)
Backed out changeset 867a1351efff (bug 1460022)
Backed out changeset 933e0b698f8e (bug 1460022)
Backed out changeset 09da660071e1 (bug 1460022)
Backed out changeset 8bb5142d3f53 (bug 1460022)
Backed out changeset 0ddf581bdaac (bug 1460022)
Backed out changeset 1cd5f9b4a6af (bug 1460022)
2018-07-04 02:49:24 +03:00
Aaron Klotz
781d8899ed Bug 1460022: Part 10 - Update crash reporter to work with revised DLL interceptor interface; r=dmajor 2018-06-27 11:51:40 -06:00
Haik Aftandilian
a7a1cdd30e Bug 1351354 - Add missing lock protection to crashReporterAPIData_Hash r=gsvelto
Add missing mutex acquisition calls to protect crashReporterAPIData_Hash and avoid
races with CrashReporter::AnnotateCrashReport() that cause assertion failures.

MozReview-Commit-ID: 6AzSlMMKV3h
2018-06-08 16:31:14 -07:00
Mike Hommey
9ceda51944 Bug 1465709 - Hook rust OOM handler on rustc 1.28. r=froydnj
Bug 1458161 added a rust OOM handler based on an unstable API that was
removed in 1.27, replaced with something that didn't allow to get the
failed allocation size.

Latest 1.28 nightly (2018-06-13) has
https://github.com/rust-lang/rust/pull/50880,
https://github.com/rust-lang/rust/pull/51264 and
https://github.com/rust-lang/rust/pull/51241 merged, which allow to
hook the OOM handler and get the failed allocation size again.

Because this is still an unstable API, we explicitly depend on strict
versions of rustc. We also explicitly error out if automation builds
end up using a rustc version that doesn't allow us to get the allocation
size for rust OOM, because we don't want that to happen without knowing.
2018-05-31 16:36:05 +09:00