diff options
Diffstat (limited to 'ipc/glue/SharedMemoryBasic_android.cpp')
-rw-r--r-- | ipc/glue/SharedMemoryBasic_android.cpp | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/ipc/glue/SharedMemoryBasic_android.cpp b/ipc/glue/SharedMemoryBasic_android.cpp deleted file mode 100644 index 05c9ca9ad..000000000 --- a/ipc/glue/SharedMemoryBasic_android.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* -*- 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/. */ - -#include <android/log.h> -#include <errno.h> -#include <fcntl.h> -#include <string.h> -#include <sys/ioctl.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> - -#include "base/process_util.h" - -#include "SharedMemoryBasic.h" - -// -// Temporarily go directly to the kernel interface until we can -// interact better with libcutils. -// -#include <linux/ashmem.h> - -namespace mozilla { -namespace ipc { - -static void -LogError(const char* what) -{ - __android_log_print(ANDROID_LOG_ERROR, "Gecko", - "%s: %s (%d)", what, strerror(errno), errno); -} - -SharedMemoryBasic::SharedMemoryBasic() - : mShmFd(-1) - , mMemory(nullptr) -{ } - -SharedMemoryBasic::~SharedMemoryBasic() -{ - Unmap(); - CloseHandle(); -} - -bool -SharedMemoryBasic::SetHandle(const Handle& aHandle) -{ - MOZ_ASSERT(-1 == mShmFd, "Already Create()d"); - mShmFd = aHandle.fd; - return true; -} - -bool -SharedMemoryBasic::Create(size_t aNbytes) -{ - MOZ_ASSERT(-1 == mShmFd, "Already Create()d"); - - // Carve a new instance off of /dev/ashmem - int shmfd = open("/" ASHMEM_NAME_DEF, O_RDWR, 0600); - if (-1 == shmfd) { - LogError("ShmemAndroid::Create():open"); - return false; - } - - if (ioctl(shmfd, ASHMEM_SET_SIZE, aNbytes)) { - LogError("ShmemAndroid::Unmap():ioctl(SET_SIZE)"); - close(shmfd); - return false; - } - - mShmFd = shmfd; - Created(aNbytes); - return true; -} - -bool -SharedMemoryBasic::Map(size_t nBytes) -{ - MOZ_ASSERT(nullptr == mMemory, "Already Map()d"); - - mMemory = mmap(nullptr, nBytes, - PROT_READ | PROT_WRITE, - MAP_SHARED, - mShmFd, - 0); - if (MAP_FAILED == mMemory) { - LogError("ShmemAndroid::Map()"); - mMemory = nullptr; - return false; - } - - Mapped(nBytes); - return true; -} - -bool -SharedMemoryBasic::ShareToProcess(base::ProcessId/*unused*/, - Handle* aNewHandle) -{ - MOZ_ASSERT(mShmFd >= 0, "Should have been Create()d by now"); - - int shmfdDup = dup(mShmFd); - if (-1 == shmfdDup) { - LogError("ShmemAndroid::ShareToProcess()"); - return false; - } - - aNewHandle->fd = shmfdDup; - aNewHandle->auto_close = true; - return true; -} - -void -SharedMemoryBasic::Unmap() -{ - if (!mMemory) { - return; - } - - if (munmap(mMemory, Size())) { - LogError("ShmemAndroid::Unmap()"); - } - mMemory = nullptr; -} - -void -SharedMemoryBasic::CloseHandle() -{ - if (mShmFd != -1) { - close(mShmFd); - mShmFd = -1; - } -} - -} // namespace ipc -} // namespace mozilla |