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

Unified Diff: content/browser/browser_io_surface_manager_mac.cc

Issue 1351753002: Mac: Ensure that Mach messages always get a reply (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests Created 5 years, 3 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: content/browser/browser_io_surface_manager_mac.cc
diff --git a/content/browser/browser_io_surface_manager_mac.cc b/content/browser/browser_io_surface_manager_mac.cc
index 519b48c684ad00058f38b6bf4dbcd78b895572f9..2cde1f5d2772ea106f0fb65b7dc9ffa74cbe23f6 100644
--- a/content/browser/browser_io_surface_manager_mac.cc
+++ b/content/browser/browser_io_surface_manager_mac.cc
@@ -199,23 +199,20 @@ void BrowserIOSurfaceManager::HandleRequest() {
switch (request.msg.header.msgh_id) {
case IOSurfaceManagerHostMsg_RegisterIOSurface::ID:
- if (!HandleRegisterIOSurfaceRequest(request.msg.register_io_surface,
- &reply.register_io_surface)) {
- return;
- }
+ HandleRegisterIOSurfaceRequest(request.msg.register_io_surface,
+ &reply.register_io_surface);
break;
case IOSurfaceManagerHostMsg_UnregisterIOSurface::ID:
- HandleUnregisterIOSurfaceRequest(request.msg.unregister_io_surface);
+ HandleUnregisterIOSurfaceRequest(request.msg.unregister_io_surface,
+ NULL);
Avi (use Gerrit) 2015/09/17 15:12:30 nullptr
ccameron 2015/09/17 18:35:05 Done.
// Unregister requests are asynchronous and do not require a reply as
// there is no guarantee for how quickly an IO surface is removed from
// the IOSurfaceManager instance after it has been deleted by a child
// process.
return;
case IOSurfaceManagerHostMsg_AcquireIOSurface::ID:
- if (!HandleAcquireIOSurfaceRequest(request.msg.acquire_io_surface,
- &reply.acquire_io_surface)) {
- return;
- }
+ HandleAcquireIOSurfaceRequest(request.msg.acquire_io_surface,
+ &reply.acquire_io_surface);
break;
default:
LOG(ERROR) << "Unknown message received!";
@@ -230,7 +227,7 @@ void BrowserIOSurfaceManager::HandleRequest() {
}
}
-bool BrowserIOSurfaceManager::HandleRegisterIOSurfaceRequest(
+void BrowserIOSurfaceManager::HandleRegisterIOSurfaceRequest(
const IOSurfaceManagerHostMsg_RegisterIOSurface& request,
IOSurfaceManagerMsg_RegisterIOSurfaceReply* reply) {
base::AutoLock lock(lock_);
@@ -241,7 +238,7 @@ bool BrowserIOSurfaceManager::HandleRegisterIOSurfaceRequest(
token.SetName(request.token_name);
if (token.IsZero() || token != gpu_process_token_) {
LOG(ERROR) << "Illegal message from non-GPU process!";
- return false;
+ return;
reveman 2015/09/17 03:58:22 don't we have to set some of the reply fields in t
ccameron 2015/09/17 18:35:05 This gets called from HandleRequest, which sets th
}
IOSurfaceMapKey key(IOSurfaceId(request.io_surface_id), request.client_id);
@@ -252,11 +249,11 @@ bool BrowserIOSurfaceManager::HandleRegisterIOSurfaceRequest(
reply->header.msgh_remote_port = request.header.msgh_remote_port;
reply->header.msgh_size = sizeof(*reply);
reply->result = true;
- return true;
}
-bool BrowserIOSurfaceManager::HandleUnregisterIOSurfaceRequest(
- const IOSurfaceManagerHostMsg_UnregisterIOSurface& request) {
+void BrowserIOSurfaceManager::HandleUnregisterIOSurfaceRequest(
+ const IOSurfaceManagerHostMsg_UnregisterIOSurface& request,
+ bool* result) {
base::AutoLock lock(lock_);
IOSurfaceManagerToken token;
@@ -265,15 +262,18 @@ bool BrowserIOSurfaceManager::HandleUnregisterIOSurfaceRequest(
token.SetName(request.token_name);
if (token.IsZero() || token != gpu_process_token_) {
LOG(ERROR) << "Illegal message from non-GPU process!";
- return false;
+ if (result)
+ *result = false;
+ return;
}
IOSurfaceMapKey key(IOSurfaceId(request.io_surface_id), request.client_id);
io_surfaces_.erase(key);
- return true;
+ if (result)
+ *result = true;
}
-bool BrowserIOSurfaceManager::HandleAcquireIOSurfaceRequest(
+void BrowserIOSurfaceManager::HandleAcquireIOSurfaceRequest(
const IOSurfaceManagerHostMsg_AcquireIOSurface& request,
IOSurfaceManagerMsg_AcquireIOSurfaceReply* reply) {
base::AutoLock lock(lock_);
@@ -285,27 +285,27 @@ bool BrowserIOSurfaceManager::HandleAcquireIOSurfaceRequest(
auto child_process_id_it = child_process_ids_.find(token);
if (child_process_id_it == child_process_ids_.end()) {
LOG(ERROR) << "Illegal message from non-child process!";
- return false;
+ return;
reveman 2015/09/17 03:58:22 Same here. Don't we have some set some reply field
ccameron 2015/09/17 18:35:05 Done.
}
reply->header.msgh_bits =
MACH_MSGH_BITS_REMOTE(request.header.msgh_bits) | MACH_MSGH_BITS_COMPLEX;
reply->header.msgh_remote_port = request.header.msgh_remote_port;
reply->header.msgh_size = sizeof(*reply);
+ reply->result = true;
IOSurfaceMapKey key(IOSurfaceId(request.io_surface_id),
child_process_id_it->second);
auto it = io_surfaces_.find(key);
if (it == io_surfaces_.end()) {
LOG(ERROR) << "Invalid Id for IOSurface " << request.io_surface_id;
- return true;
+ return;
}
reply->body.msgh_descriptor_count = 1;
reply->io_surface_port.name = it->second->get();
reply->io_surface_port.disposition = MACH_MSG_TYPE_COPY_SEND;
reply->io_surface_port.type = MACH_MSG_PORT_DESCRIPTOR;
- return true;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698