| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 1 // Copyright 2015 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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 204   for (int i = 0; i < arraysize(thread_handles); ++i) { | 204   for (int i = 0; i < arraysize(thread_handles); ++i) { | 
| 205     HANDLE pipe = | 205     HANDLE pipe = | 
| 206         CreateNamedPipe(pipe_name_16.c_str(), | 206         CreateNamedPipe(pipe_name_16.c_str(), | 
| 207                         PIPE_ACCESS_DUPLEX, | 207                         PIPE_ACCESS_DUPLEX, | 
| 208                         PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, | 208                         PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, | 
| 209                         arraysize(thread_handles), | 209                         arraysize(thread_handles), | 
| 210                         512, | 210                         512, | 
| 211                         512, | 211                         512, | 
| 212                         0, | 212                         0, | 
| 213                         nullptr); | 213                         nullptr); | 
|  | 214     PCHECK(pipe != INVALID_HANDLE_VALUE) << "CreateNamedPipe"; | 
| 214 | 215 | 
| 215     // Ownership of this object (and the pipe instance) is given to the new | 216     // Ownership of this object (and the pipe instance) is given to the new | 
| 216     // thread. We close the thread handles at the end of the scope. They clean | 217     // thread. We close the thread handles at the end of the scope. They clean | 
| 217     // up the context object and the pipe instance on termination. | 218     // up the context object and the pipe instance on termination. | 
| 218     internal::PipeServiceContext* context = | 219     internal::PipeServiceContext* context = | 
| 219         new internal::PipeServiceContext(port_.get(), | 220         new internal::PipeServiceContext(port_.get(), | 
| 220                                          pipe, | 221                                          pipe, | 
| 221                                          delegate, | 222                                          delegate, | 
| 222                                          &clients_lock_, | 223                                          &clients_lock_, | 
| 223                                          &clients_, | 224                                          &clients_, | 
| 224                                          shutdown_token); | 225                                          shutdown_token); | 
| 225     thread_handles[i].reset( | 226     thread_handles[i].reset( | 
| 226         CreateThread(nullptr, 0, &PipeServiceProc, context, 0, nullptr)); | 227         CreateThread(nullptr, 0, &PipeServiceProc, context, 0, nullptr)); | 
|  | 228     PCHECK(thread_handles[i].is_valid()) << "CreateThread"; | 
| 227   } | 229   } | 
| 228 | 230 | 
| 229   delegate->ExceptionHandlerServerStarted(); | 231   delegate->ExceptionHandlerServerStarted(); | 
| 230 | 232 | 
| 231   // This is the main loop of the server. Most work is done on the threadpool, | 233   // This is the main loop of the server. Most work is done on the threadpool, | 
| 232   // other than process end handling which is posted back to this main thread, | 234   // other than process end handling which is posted back to this main thread, | 
| 233   // as we must unregister the threadpool waits here. | 235   // as we must unregister the threadpool waits here. | 
| 234   for (;;) { | 236   for (;;) { | 
| 235     OVERLAPPED* ov = nullptr; | 237     OVERLAPPED* ov = nullptr; | 
| 236     ULONG_PTR key = 0; | 238     ULONG_PTR key = 0; | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 420 void __stdcall ExceptionHandlerServer::OnProcessEnd(void* ctx, BOOLEAN) { | 422 void __stdcall ExceptionHandlerServer::OnProcessEnd(void* ctx, BOOLEAN) { | 
| 421   // This function is executed on the thread pool. | 423   // This function is executed on the thread pool. | 
| 422   internal::ClientData* client = reinterpret_cast<internal::ClientData*>(ctx); | 424   internal::ClientData* client = reinterpret_cast<internal::ClientData*>(ctx); | 
| 423   base::AutoLock lock(*client->lock()); | 425   base::AutoLock lock(*client->lock()); | 
| 424 | 426 | 
| 425   // Post back to the main thread to have it delete this client record. | 427   // Post back to the main thread to have it delete this client record. | 
| 426   PostQueuedCompletionStatus(client->port(), 0, ULONG_PTR(client), nullptr); | 428   PostQueuedCompletionStatus(client->port(), 0, ULONG_PTR(client), nullptr); | 
| 427 } | 429 } | 
| 428 | 430 | 
| 429 }  // namespace crashpad | 431 }  // namespace crashpad | 
| OLD | NEW | 
|---|