Changeset View
Changeset View
Standalone View
Standalone View
head/www/firefox/files/patch-bug1550891
Show First 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | @@ -212,6 +216,9 @@ bool SharedMemory::CreateInternal(size_t size, bool freezeable) { | ||||
} | } | ||||
needs_truncate = false; | needs_truncate = false; | ||||
+#elif defined(__FreeBSD__) | +#elif defined(__FreeBSD__) | ||||
+ // FreeBSD supports anonymous shm_open | + // FreeBSD supports anonymous shm_open | ||||
+ fd.reset(shm_open(SHM_ANON, O_RDWR, 0600)); | + fd.reset(shm_open(SHM_ANON, O_RDWR, 0600)); | ||||
#else | #else | ||||
// Generic Unix: shm_open + shm_unlink | // Generic Unix: shm_open + shm_unlink | ||||
do { | do { | ||||
@@ -275,6 +282,13 @@ bool SharedMemory::Freeze() { | @@ -277,6 +284,14 @@ bool SharedMemory::ReadOnlyCopy(SharedMemory* ro_out) { | ||||
CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno); | |||||
return false; | return false; | ||||
} | } | ||||
ro_file = mapped_file_; | |||||
+#elif defined(__FreeBSD__) | +#elif defined(__FreeBSD__) | ||||
+ cap_rights_t rights; | + cap_rights_t rights; | ||||
+ cap_rights_init(&rights, CAP_MMAP_R); | + cap_rights_init(&rights, CAP_MMAP_R); | ||||
+ if (cap_rights_limit(mapped_file_, &rights) != 0) { | + if (cap_rights_limit(mapped_file_, &rights) != 0) { | ||||
+ CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno); | + CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno); | ||||
+ return false; | + return false; | ||||
+ } | + } | ||||
+ ro_file = mapped_file_; | |||||
#else | #else | ||||
DCHECK(frozen_file_ >= 0); | DCHECK(frozen_file_ >= 0); | ||||
DCHECK(mapped_file_ >= 0); | DCHECK(mapped_file_ >= 0); |