| Index: mojo/system/core_impl.h
|
| diff --git a/mojo/system/core_impl.h b/mojo/system/core_impl.h
|
| deleted file mode 100644
|
| index e0cbd1e3951cd2cc06aaf27c9d117a0829f2aa1a..0000000000000000000000000000000000000000
|
| --- a/mojo/system/core_impl.h
|
| +++ /dev/null
|
| @@ -1,153 +0,0 @@
|
| -// Copyright 2013 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.
|
| -
|
| -#ifndef MOJO_SYSTEM_CORE_IMPL_H_
|
| -#define MOJO_SYSTEM_CORE_IMPL_H_
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/synchronization/lock.h"
|
| -#include "mojo/public/system/core_private.h"
|
| -#include "mojo/system/handle_table.h"
|
| -#include "mojo/system/mapping_table.h"
|
| -#include "mojo/system/system_impl_export.h"
|
| -
|
| -namespace mojo {
|
| -namespace system {
|
| -
|
| -class Dispatcher;
|
| -
|
| -// |CoreImpl| is a singleton object that implements the Mojo system calls. All
|
| -// public methods are thread-safe.
|
| -class MOJO_SYSTEM_IMPL_EXPORT CoreImpl : public Core {
|
| - public:
|
| - // These methods are only to be used by via the embedder API.
|
| - CoreImpl();
|
| - virtual ~CoreImpl();
|
| - MojoHandle AddDispatcher(const scoped_refptr<Dispatcher>& dispatcher);
|
| -
|
| - // |CorePrivate| implementation:
|
| - virtual MojoTimeTicks GetTimeTicksNow() OVERRIDE;
|
| - virtual MojoResult Close(MojoHandle handle) OVERRIDE;
|
| - virtual MojoResult Wait(MojoHandle handle,
|
| - MojoWaitFlags flags,
|
| - MojoDeadline deadline) OVERRIDE;
|
| - virtual MojoResult WaitMany(const MojoHandle* handles,
|
| - const MojoWaitFlags* flags,
|
| - uint32_t num_handles,
|
| - MojoDeadline deadline) OVERRIDE;
|
| - virtual MojoResult CreateMessagePipe(
|
| - MojoHandle* message_pipe_handle0,
|
| - MojoHandle* message_pipe_handle1) OVERRIDE;
|
| - virtual MojoResult WriteMessage(MojoHandle message_pipe_handle,
|
| - const void* bytes,
|
| - uint32_t num_bytes,
|
| - const MojoHandle* handles,
|
| - uint32_t num_handles,
|
| - MojoWriteMessageFlags flags) OVERRIDE;
|
| - virtual MojoResult ReadMessage(MojoHandle message_pipe_handle,
|
| - void* bytes,
|
| - uint32_t* num_bytes,
|
| - MojoHandle* handles,
|
| - uint32_t* num_handles,
|
| - MojoReadMessageFlags flags) OVERRIDE;
|
| - virtual MojoResult CreateDataPipe(
|
| - const MojoCreateDataPipeOptions* options,
|
| - MojoHandle* data_pipe_producer_handle,
|
| - MojoHandle* data_pipe_consumer_handle) OVERRIDE;
|
| - virtual MojoResult WriteData(MojoHandle data_pipe_producer_handle,
|
| - const void* elements,
|
| - uint32_t* num_bytes,
|
| - MojoWriteDataFlags flags) OVERRIDE;
|
| - virtual MojoResult BeginWriteData(MojoHandle data_pipe_producer_handle,
|
| - void** buffer,
|
| - uint32_t* buffer_num_bytes,
|
| - MojoWriteDataFlags flags) OVERRIDE;
|
| - virtual MojoResult EndWriteData(MojoHandle data_pipe_producer_handle,
|
| - uint32_t num_bytes_written) OVERRIDE;
|
| - virtual MojoResult ReadData(MojoHandle data_pipe_consumer_handle,
|
| - void* elements,
|
| - uint32_t* num_bytes,
|
| - MojoReadDataFlags flags) OVERRIDE;
|
| - virtual MojoResult BeginReadData(MojoHandle data_pipe_consumer_handle,
|
| - const void** buffer,
|
| - uint32_t* buffer_num_bytes,
|
| - MojoReadDataFlags flags) OVERRIDE;
|
| - virtual MojoResult EndReadData(MojoHandle data_pipe_consumer_handle,
|
| - uint32_t num_bytes_read) OVERRIDE;
|
| - virtual MojoResult CreateSharedBuffer(
|
| - const MojoCreateSharedBufferOptions* options,
|
| - uint64_t num_bytes,
|
| - MojoHandle* shared_buffer_handle) OVERRIDE;
|
| - virtual MojoResult DuplicateBufferHandle(
|
| - MojoHandle buffer_handle,
|
| - const MojoDuplicateBufferHandleOptions* options,
|
| - MojoHandle* new_buffer_handle) OVERRIDE;
|
| - virtual MojoResult MapBuffer(MojoHandle buffer_handle,
|
| - uint64_t offset,
|
| - uint64_t num_bytes,
|
| - void** buffer,
|
| - MojoMapBufferFlags flags) OVERRIDE;
|
| - virtual MojoResult UnmapBuffer(void* buffer) OVERRIDE;
|
| -
|
| - private:
|
| - friend bool internal::ShutdownCheckNoLeaks(CoreImpl*);
|
| -
|
| - // The |busy| member is used only to deal with functions (in particular
|
| - // |WriteMessage()|) that want to hold on to a dispatcher and later remove it
|
| - // from the handle table, without holding on to the handle table lock.
|
| - //
|
| - // For example, if |WriteMessage()| is called with a handle to be sent, (under
|
| - // the handle table lock) it must first check that that handle is not busy (if
|
| - // it is busy, then it fails with |MOJO_RESULT_BUSY|) and then marks it as
|
| - // busy. To avoid deadlock, it should also try to acquire the locks for all
|
| - // the dispatchers for the handles that it is sending (and fail with
|
| - // |MOJO_RESULT_BUSY| if the attempt fails). At this point, it can release the
|
| - // handle table lock.
|
| - //
|
| - // If |Close()| is simultaneously called on that handle, it too checks if the
|
| - // handle is marked busy. If it is, it fails (with |MOJO_RESULT_BUSY|). This
|
| - // prevents |WriteMessage()| from sending a handle that has been closed (or
|
| - // learning about this too late).
|
| - struct HandleTableEntry {
|
| - HandleTableEntry();
|
| - explicit HandleTableEntry(const scoped_refptr<Dispatcher>& dispatcher);
|
| - ~HandleTableEntry();
|
| -
|
| - scoped_refptr<Dispatcher> dispatcher;
|
| - bool busy;
|
| - };
|
| - typedef base::hash_map<MojoHandle, HandleTableEntry> HandleTableMap;
|
| -
|
| - // Looks up the dispatcher for the given handle. Returns null if the handle is
|
| - // invalid.
|
| - scoped_refptr<Dispatcher> GetDispatcher(MojoHandle handle);
|
| -
|
| - // Internal implementation of |Wait()| and |WaitMany()|; doesn't do basic
|
| - // validation of arguments.
|
| - MojoResult WaitManyInternal(const MojoHandle* handles,
|
| - const MojoWaitFlags* flags,
|
| - uint32_t num_handles,
|
| - MojoDeadline deadline);
|
| -
|
| - // ---------------------------------------------------------------------------
|
| -
|
| - // TODO(vtl): |handle_table_lock_| should be a reader-writer lock (if only we
|
| - // had them).
|
| - base::Lock handle_table_lock_; // Protects |handle_table_|.
|
| - HandleTable handle_table_;
|
| -
|
| - base::Lock mapping_table_lock_; // Protects |mapping_table_|.
|
| - MappingTable mapping_table_;
|
| -
|
| - // ---------------------------------------------------------------------------
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CoreImpl);
|
| -};
|
| -
|
| -} // namespace system
|
| -} // namespace mojo
|
| -
|
| -#endif // MOJO_SYSTEM_CORE_IMPL_H_
|
|
|