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

Unified Diff: sandbox/win/src/sharedmem_ipc_client.h

Issue 1851213002: Remove sandbox on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nacl compile issues Created 4 years, 9 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
« no previous file with comments | « sandbox/win/src/service_resolver_unittest.cc ('k') | sandbox/win/src/sharedmem_ipc_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sandbox/win/src/sharedmem_ipc_client.h
diff --git a/sandbox/win/src/sharedmem_ipc_client.h b/sandbox/win/src/sharedmem_ipc_client.h
deleted file mode 100644
index 67fd0635970f15cd45270141f146036756b7c983..0000000000000000000000000000000000000000
--- a/sandbox/win/src/sharedmem_ipc_client.h
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2006-2008 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 SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__
-#define SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "sandbox/win/src/crosscall_params.h"
-#include "sandbox/win/src/sandbox.h"
-
-// IPC transport implementation that uses shared memory.
-// This is the client side
-//
-// The shared memory is divided on blocks called channels, and potentially
-// it can perform as many concurrent IPC calls as channels. The IPC over
-// each channel is strictly synchronous for the client.
-//
-// Each channel as a channel control section associated with. Each control
-// section has two kernel events (known as ping and pong) and a integer
-// variable that maintains a state
-//
-// this is the state diagram of a channel:
-//
-// locked in service
-// kFreeChannel---------->BusyChannel-------------->kAckChannel
-// ^ |
-// |_________________________________________________|
-// answer ready
-//
-// The protocol is as follows:
-// 1) client finds a free channel: state = kFreeChannel
-// 2) does an atomic compare-and-swap, now state = BusyChannel
-// 3) client writes the data into the channel buffer
-// 4) client signals the ping event and waits (blocks) on the pong event
-// 5) eventually the server signals the pong event
-// 6) the client awakes and reads the answer from the same channel
-// 7) the client updates its InOut parameters with the new data from the
-// shared memory section.
-// 8) the client atomically sets the state = kFreeChannel
-//
-// In the shared memory the layout is as follows:
-//
-// [ channel count ]
-// [ channel control 0]
-// [ channel control 1]
-// [ channel control N]
-// [ channel buffer 0 ] 1024 bytes
-// [ channel buffer 1 ] 1024 bytes
-// [ channel buffer N ] 1024 bytes
-//
-// By default each channel buffer is 1024 bytes
-namespace sandbox {
-
-// the possible channel states as described above
-enum ChannelState {
- // channel is free
- kFreeChannel = 1,
- // IPC in progress client side
- kBusyChannel,
- // IPC in progress server side
- kAckChannel,
- // not used right now
- kReadyChannel,
- // IPC abandoned by client side
- kAbandonedChannel
-};
-
-// The next two constants control the time outs for the IPC.
-const DWORD kIPCWaitTimeOut1 = 1000; // Milliseconds.
-const DWORD kIPCWaitTimeOut2 = 50; // Milliseconds.
-
-// the channel control structure
-struct ChannelControl {
- // points to be beginning of the channel buffer, where data goes
- size_t channel_base;
- // maintains the state from the ChannelState enumeration
- volatile LONG state;
- // the ping event is signaled by the client when the IPC data is ready on
- // the buffer
- HANDLE ping_event;
- // the client waits on the pong event for the IPC answer back
- HANDLE pong_event;
- // the IPC unique identifier
- uint32_t ipc_tag;
-};
-
-struct IPCControl {
- // total number of channels available, some might be busy at a given time
- size_t channels_count;
- // handle to a shared mutex to detect when the server is dead
- HANDLE server_alive;
- // array of channel control structures
- ChannelControl channels[1];
-};
-
-// the actual shared memory IPC implementation class. This object is designed
-// to be lightweight so it can be constructed on-site (at the calling place)
-// wherever an IPC call is needed.
-class SharedMemIPCClient {
- public:
- // Creates the IPC client.
- // as parameter it takes the base address of the shared memory
- explicit SharedMemIPCClient(void* shared_mem);
-
- // locks a free channel and returns the channel buffer memory base. This call
- // blocks until there is a free channel
- void* GetBuffer();
-
- // releases the lock on the channel, for other to use. call this if you have
- // called GetBuffer and you want to abort but have not called yet DoCall()
- void FreeBuffer(void* buffer);
-
- // Performs the actual IPC call.
- // params: The blob of packed input parameters.
- // answer: upon IPC completion, it contains the server answer to the IPC.
- // If the return value is not SBOX_ERROR_CHANNEL_ERROR, the caller has to free
- // the channel.
- // returns ALL_OK if the IPC mechanism successfully delivered. You still need
- // to check on the answer structure to see the actual IPC result.
- ResultCode DoCall(CrossCallParams* params, CrossCallReturn* answer);
-
- private:
- // Returns the index of the first free channel. It sets 'severe_failure'
- // to true if there is an unrecoverable error that does not allow to
- // find a channel.
- size_t LockFreeChannel(bool* severe_failure);
- // Return the channel index given the address of the buffer.
- size_t ChannelIndexFromBuffer(const void* buffer);
- IPCControl* control_;
- // point to the first channel base
- char* first_base_;
-};
-
-} // namespace sandbox
-
-#endif // SANDBOX_SRC_SHAREDMEM_IPC_CLIENT_H__
« no previous file with comments | « sandbox/win/src/service_resolver_unittest.cc ('k') | sandbox/win/src/sharedmem_ipc_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698