OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |