Commit 100ebad7 authored by Brian Watling's avatar Brian Watling Committed by Pavlo Kushnir

Fix crashes in readRandomDevice()

Summary: The comment in readRandomDevice() lies - the PCHECK fails with "Bad file descriptor" in some tests. This is most likely due to a race where a background thread is calling readRandomDevice() while the main thread shuts down. Another possibility is bad destruction order, where rnadomDevice is destroyed before some other static object whose destructor calls readRandomDevice(). Either way, this fixes it without having to chace down every instance.

Test Plan: run unit tests

Reviewed By: meyering@fb.com

Subscribers: antonl, trunkagent, meyering, simpkins, njormrod, folly-diffs@, tao-eng@

FB internal diff: D1660903

Signature: t1:1660903:1415215895:7f1f96ab7416b45c4dc18e78173fb59eb27bd03b
parent 20dfb55a
......@@ -31,8 +31,9 @@ namespace folly {
namespace {
void readRandomDevice(void* data, size_t size) {
// Keep it open for the duration of the program
static File randomDevice("/dev/urandom");
// Keep it open for the duration of the program. Note that we leak the File
// to ensure the file is indeed open for the duration of the program.
static File& randomDevice = *new File("/dev/urandom");
auto bytesRead = readFull(randomDevice.fd(), data, size);
PCHECK(bytesRead >= 0 && size_t(bytesRead) == size);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment