Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: native_client_sdk/src/libraries/nacl_mounts/kernel_object.cc

Issue 12194030: Rename mount (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix whitespace Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/libraries/nacl_mounts/kernel_object.cc
diff --git a/native_client_sdk/src/libraries/nacl_mounts/kernel_object.cc b/native_client_sdk/src/libraries/nacl_mounts/kernel_object.cc
deleted file mode 100644
index 6ee6a33123d642f1464d847aabc875ed252a6119..0000000000000000000000000000000000000000
--- a/native_client_sdk/src/libraries/nacl_mounts/kernel_object.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "nacl_mounts/kernel_object.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <pthread.h>
-
-#include <algorithm>
-#include <map>
-#include <string>
-#include <vector>
-
-#include "nacl_mounts/kernel_handle.h"
-#include "nacl_mounts/mount.h"
-#include "nacl_mounts/mount_node.h"
-#include "utils/auto_lock.h"
-
-KernelObject::KernelObject() {
- pthread_mutex_init(&kernel_lock_, NULL);
- pthread_mutex_init(&process_lock_, NULL);
-}
-
-KernelObject::~KernelObject() {
- pthread_mutex_destroy(&process_lock_);
- pthread_mutex_destroy(&kernel_lock_);
-}
-
-// Uses longest prefix to find the mount for the give path, then
-// acquires the mount and returns it with a relative path.
-Mount* KernelObject::AcquireMountAndPath(const std::string& relpath,
- Path* out_path) {
- Path abs_path;
- {
- AutoLock lock(&process_lock_);
- abs_path = GetAbsPathLocked(relpath);
- }
-
- AutoLock lock(&kernel_lock_);
- Mount* mount = NULL;
-
-
- // Find longest prefix
- size_t max = abs_path.Size();
- for (size_t len = 0; len < abs_path.Size(); len++) {
- MountMap_t::iterator it = mounts_.find(abs_path.Range(0, max - len));
- if (it != mounts_.end()) {
- out_path->Set("/");
- out_path->Append(abs_path.Range(max - len, max));
- mount = it->second;
- break;
- }
- }
-
- if (NULL == mount) {
- errno = ENOTDIR;
- return NULL;
- }
-
- // Acquire the mount while we hold the proxy lock
- mount->Acquire();
- return mount;
-}
-
-void KernelObject::ReleaseMount(Mount* mnt) {
- AutoLock lock(&kernel_lock_);
- mnt->Release();
-}
-
-KernelHandle* KernelObject::AcquireHandle(int fd) {
- AutoLock lock(&process_lock_);
- if (fd < 0 || fd >= static_cast<int>(handle_map_.size())) {
- errno = EBADF;
- return NULL;
- }
-
- KernelHandle* handle = handle_map_[fd];
- if (NULL == handle) {
- errno = EBADF;
- return NULL;
- }
-
- // Ref count while holding parent mutex
- handle->Acquire();
-
- lock.Unlock();
- if (handle->node_) handle->mount_->AcquireNode(handle->node_);
-
- return handle;
-}
-
-void KernelObject::ReleaseHandle(KernelHandle* handle) {
- // The handle must already be held before taking the
- // kernel lock.
- if (handle->node_) handle->mount_->ReleaseNode(handle->node_);
-
- AutoLock lock(&process_lock_);
- handle->Release();
-}
-
-// Helper function to properly sort FD order in the heap, forcing
-// lower numberd FD to be available first.
-static bool FdOrder(int i, int j) {
- return i > j;
-}
-
-int KernelObject::AllocateFD(KernelHandle* handle) {
- AutoLock lock(&process_lock_);
- int id;
-
- // Acquire the handle and its mount since we are about to track it with
- // this FD.
- handle->Acquire();
- handle->mount_->Acquire();
-
- // If we can recycle and FD, use that first
- if (free_fds_.size()) {
- id = free_fds_.front();
- std::pop_heap(free_fds_.begin(), free_fds_.end(), FdOrder);
- free_fds_.pop_back();
- handle_map_[id] = handle;
- } else {
- id = handle_map_.size();
- handle_map_.push_back(handle);
- }
- return id;
-}
-
-void KernelObject::AssignFD(int fd, KernelHandle* handle) {
- AutoLock lock(&process_lock_);
-
- // Acquire the handle and its mount since we are about to track it with
- // this FD.
- handle->Acquire();
- handle->mount_->Acquire();
-
- if (fd >= handle_map_.size())
- handle_map_.resize(fd + 1);
-
- assert(handle_map_[fd] == NULL);
- handle_map_[fd] = handle;
-}
-
-void KernelObject::FreeFD(int fd) {
- AutoLock lock(&process_lock_);
-
- // Release the mount and handle since we no longer
- // track them with this FD.
- KernelHandle* handle = handle_map_[fd];
- handle->mount_->Release();
- handle->Release();
-
- handle_map_[fd] = NULL;
- free_fds_.push_back(fd);
- std::push_heap(free_fds_.begin(), free_fds_.end(), FdOrder);
-}
-
-Path KernelObject::GetAbsPathLocked(const std::string& path) {
- // Generate absolute path
- Path abs_path(cwd_);
- if (path[0] == '/') {
- abs_path = path;
- } else {
- abs_path = cwd_;
- abs_path.Append(path);
- }
-
- return abs_path;
-}

Powered by Google App Engine
This is Rietveld 408576698