IPC::Message* Shmem::ShareTo(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead, base::ProcessHandle aProcess, int32 routingId) { AssertInvariants(); if (SharedMemory::TYPE_BASIC == mSegment->Type()) { SharedMemoryBasic* seg = static_cast<SharedMemoryBasic*>(mSegment); SharedMemoryBasic::Handle handle; if (!seg->ShareToProcess(aProcess, &handle)) return 0; return new ShmemCreated(routingId, mId, mSize, handle); } #ifdef MOZ_HAVE_SHAREDMEMORYSYSV else if (SharedMemory::TYPE_SYSV == mSegment->Type()) { SharedMemorySysV* seg = static_cast<SharedMemorySysV*>(mSegment); return new ShmemCreated(routingId, mId, mSize, seg->GetHandle()); } #endif else { NS_RUNTIMEABORT("unknown shmem type (here?!)"); } return 0; }
IPC::Message* Shmem::ShareTo(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead, base::ProcessHandle aProcess, int32_t routingId) { AssertInvariants(); // kInvalidProcessHandle is used to indicate that it's the same process. if (aProcess == kInvalidProcessHandle) { aProcess = base::GetCurrentProcessHandle(); } if (SharedMemory::TYPE_BASIC == mSegment->Type()) { SharedMemoryBasic* seg = static_cast<SharedMemoryBasic*>(mSegment); SharedMemoryBasic::Handle handle; if (!seg->ShareToProcess(aProcess, &handle)) return nullptr; return new ShmemCreated(routingId, mId, mSize, handle); } #ifdef MOZ_HAVE_SHAREDMEMORYSYSV else if (SharedMemory::TYPE_SYSV == mSegment->Type()) { SharedMemorySysV* seg = static_cast<SharedMemorySysV*>(mSegment); return new ShmemCreated(routingId, mId, mSize, seg->GetHandle()); } #endif else { MOZ_ASSERT(false, "unknown shmem type (here?!)"); return nullptr; } return nullptr; }
int Shmem::GetSysVID() const { #ifdef MOZ_HAVE_SHAREDMEMORYSYSV AssertInvariants(); if (mSegment->Type() != SharedMemory::TYPE_SYSV) NS_RUNTIMEABORT("Can't call GetSysVID() on a non-SysV Shmem!"); SharedMemorySysV* seg = static_cast<SharedMemorySysV*>(mSegment); return seg->GetHandle(); #else NS_RUNTIMEABORT("Can't call GetSysVID() with no support for SysV shared memory!"); return -1; // not reached #endif }