Files
tubestation/ipc/glue/SharedMemoryBasic_mach.h
Nika Layzell 3db1147269 Bug 1852082 - Part 1: Allow stealing ownership of the shared memory handle from SharedMemoryBasic, r=ipc-reviewers,mccr8
This is not the ideal form of this API, but avoids unnecessary handle
cloning and the corresponding fallible calls in some situations. In the
future we still want to do something more like bug 1797039, which will
provide a proper separation of handles from mappings for shared memory
regions.

Differential Revision: https://phabricator.services.mozilla.com/D187682
2023-09-15 15:26:50 +00:00

76 lines
1.9 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_ipc_SharedMemoryBasic_mach_h
#define mozilla_ipc_SharedMemoryBasic_mach_h
#include "base/process.h"
#include "mozilla/UniquePtrExtensions.h"
#include "mozilla/ipc/SharedMemory.h"
#include <mach/port.h>
#ifdef FUZZING
# include "mozilla/ipc/SharedMemoryFuzzer.h"
#endif
//
// This is a low-level wrapper around platform shared memory. Don't
// use it directly; use Shmem allocated through IPDL interfaces.
//
class MachPortSender;
class ReceivePort;
namespace mozilla {
namespace ipc {
class SharedMemoryBasic final
: public SharedMemoryCommon<mozilla::UniqueMachSendRight> {
public:
SharedMemoryBasic();
virtual bool SetHandle(Handle aHandle, OpenRights aRights) override;
virtual bool Create(size_t aNbytes) override;
virtual bool Map(size_t nBytes, void* fixed_address = nullptr) override;
virtual void Unmap() override;
virtual void* memory() const override {
#ifdef FUZZING
return SharedMemoryFuzzer::MutateSharedMemory(mMemory, mAllocSize);
#else
return mMemory;
#endif
}
static Handle NULLHandle() { return Handle(); }
static void* FindFreeAddressSpace(size_t aSize);
virtual bool IsHandleValid(const Handle& aHandle) const override;
virtual Handle CloneHandle() override;
virtual Handle TakeHandle() override;
private:
~SharedMemoryBasic();
mozilla::UniqueMachSendRight mPort;
// Pointer to mapped region, null if unmapped.
void* mMemory;
// Access rights to map an existing region with.
OpenRights mOpenRights;
};
} // namespace ipc
} // namespace mozilla
#endif // ifndef mozilla_ipc_SharedMemoryBasic_mach_h