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

Side by Side Diff: util/mach/child_port_handshake.cc

Issue 809103002: Add NewMachPort() and its test, and switch call sites to use it (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Address review feedback Created 6 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | util/mach/mach_extensions.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 return MACH_PORT_NULL; 119 return MACH_PORT_NULL;
120 } 120 }
121 121
122 if (!LoggingWriteFD(pipe_write, service_name.c_str(), service_name_length)) { 122 if (!LoggingWriteFD(pipe_write, service_name.c_str(), service_name_length)) {
123 LOG(WARNING) << "no client check-in"; 123 LOG(WARNING) << "no client check-in";
124 return MACH_PORT_NULL; 124 return MACH_PORT_NULL;
125 } 125 }
126 126
127 // A kqueue cannot monitor a raw Mach receive right with EVFILT_MACHPORT. It 127 // A kqueue cannot monitor a raw Mach receive right with EVFILT_MACHPORT. It
128 // requires a port set. Create a new port set and add the receive right to it. 128 // requires a port set. Create a new port set and add the receive right to it.
129 mach_port_t server_port_set; 129 base::mac::ScopedMachPortSet server_port_set(
130 kr = mach_port_allocate( 130 NewMachPort(MACH_PORT_RIGHT_PORT_SET));
131 mach_task_self(), MACH_PORT_RIGHT_PORT_SET, &server_port_set); 131 CHECK_NE(server_port_set, kMachPortNull);
132 MACH_CHECK(kr == KERN_SUCCESS, kr) << "mach_port_allocate";
133 base::mac::ScopedMachPortSet server_port_set_owner(server_port_set);
134 132
135 kr = mach_port_insert_member(mach_task_self(), server_port, server_port_set); 133 kr = mach_port_insert_member(mach_task_self(), server_port, server_port_set);
136 MACH_CHECK(kr == KERN_SUCCESS, kr) << "mach_port_insert_member"; 134 MACH_CHECK(kr == KERN_SUCCESS, kr) << "mach_port_insert_member";
137 135
138 // Set up a kqueue to monitor both the server’s receive right and the write 136 // Set up a kqueue to monitor both the server’s receive right and the write
139 // side of the pipe. Messages from the client will be received via the receive 137 // side of the pipe. Messages from the client will be received via the receive
140 // right, and the pipe will show EOF if the client closes its read side 138 // right, and the pipe will show EOF if the client closes its read side
141 // prematurely. 139 // prematurely.
142 base::ScopedFD kq(kqueue()); 140 base::ScopedFD kq(kqueue());
143 PCHECK(kq != -1) << "kqueue"; 141 PCHECK(kq != -1) << "kqueue";
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 bootstrap_look_up(bootstrap_port, service_name.c_str(), &server_port); 337 bootstrap_look_up(bootstrap_port, service_name.c_str(), &server_port);
340 BOOTSTRAP_CHECK(kr == BOOTSTRAP_SUCCESS, kr) << "bootstrap_look_up"; 338 BOOTSTRAP_CHECK(kr == BOOTSTRAP_SUCCESS, kr) << "bootstrap_look_up";
341 base::mac::ScopedMachSendRight server_port_owner(server_port); 339 base::mac::ScopedMachSendRight server_port_owner(server_port);
342 340
343 // Check in with the server. 341 // Check in with the server.
344 kr = child_port_check_in(server_port, token, port, right_type); 342 kr = child_port_check_in(server_port, token, port, right_type);
345 MACH_CHECK(kr == KERN_SUCCESS, kr) << "child_port_check_in"; 343 MACH_CHECK(kr == KERN_SUCCESS, kr) << "child_port_check_in";
346 } 344 }
347 345
348 } // namespace crashpad 346 } // namespace crashpad
OLDNEW
« no previous file with comments | « no previous file | util/mach/mach_extensions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698