summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host/render_widget_helper.cc
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-05 21:40:11 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-05 21:40:11 +0000
commit2749885f65019b0216f5c0401d0f5a28585eb83f (patch)
tree166a5090004f63ae435e434d711e2ce335909851 /chrome/browser/renderer_host/render_widget_helper.cc
parent06533c0b11ce14b45eb0205fdc28a217eeba763c (diff)
downloadchromium_src-2749885f65019b0216f5c0401d0f5a28585eb83f.zip
chromium_src-2749885f65019b0216f5c0401d0f5a28585eb83f.tar.gz
chromium_src-2749885f65019b0216f5c0401d0f5a28585eb83f.tar.bz2
POSIX: Rewrite IPC's interaction with FileDescriptor
The FileDescriptor API is clearly too hard to use. It's the only IPC data type which is non-POD and serialising an invalid file descriptor is fatal to Chrome on POSIX. The use of Maybe is possibly non-obvious to non-functional programmers. This patch merges Maybe and FileDescriptor so that serialising invalid file descriptors is permitted and results in -1 at the other end. (Serialising /closed/ a file descriptor is still fatal.) Also, it adds a pointer in base/file_descriptor.h to instructions for its use with IPC. Although it's generally bad practice to mention IPC in base, in this case I cannot find another suitable location. Review URL: http://codereview.chromium.org/39208 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11041 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host/render_widget_helper.cc')
-rw-r--r--chrome/browser/renderer_host/render_widget_helper.cc10
1 files changed, 5 insertions, 5 deletions
diff --git a/chrome/browser/renderer_host/render_widget_helper.cc b/chrome/browser/renderer_host/render_widget_helper.cc
index 715a85b..24e1710 100644
--- a/chrome/browser/renderer_host/render_widget_helper.cc
+++ b/chrome/browser/renderer_host/render_widget_helper.cc
@@ -263,21 +263,21 @@ TransportDIB* RenderWidgetHelper::MapTransportDIB(TransportDIB::Id dib_id) {
}
void RenderWidgetHelper::AllocTransportDIB(
- size_t size, IPC::Maybe<TransportDIB::Handle>* result) {
+ size_t size, TransportDIB::Handle* result) {
base::SharedMemory* shared_memory = new base::SharedMemory();
if (!shared_memory->Create(L"", false /* read write */,
false /* do not open existing */, size)) {
- result->valid = false;
+ result->fd = -1;
+ result->auto_close = false;
delete shared_memory;
return;
}
- result->valid = true;
- shared_memory->GiveToProcess(0 /* pid, not needed */, &result->value);
+ shared_memory->GiveToProcess(0 /* pid, not needed */, result);
// Keep a copy of the file descriptor around
AutoLock locked(allocated_dibs_lock_);
- allocated_dibs_[shared_memory->id()] = dup(result->value.fd);
+ allocated_dibs_[shared_memory->id()] = dup(result->fd);
}
void RenderWidgetHelper::FreeTransportDIB(TransportDIB::Id dib_id) {