mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2025-02-02 19:41:09 +00:00
Address review comments from r843 (http://breakpad.appspot.com/307001)
Review URL: http://breakpad.appspot.com/308001 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@844 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
1e9dbde88a
commit
405bb7aff7
|
@ -94,6 +94,10 @@ extern "C" {
|
||||||
#define BREAKPAD_SERVER_PARAMETER_PREFIX "BreakpadServerParameterPrefix_"
|
#define BREAKPAD_SERVER_PARAMETER_PREFIX "BreakpadServerParameterPrefix_"
|
||||||
#define BREAKPAD_ON_DEMAND "BreakpadOnDemand"
|
#define BREAKPAD_ON_DEMAND "BreakpadOnDemand"
|
||||||
|
|
||||||
|
// A service name associated with the original bootstrap parent port, saved in
|
||||||
|
// OnDemandServer and restored in Inspector.
|
||||||
|
#define BREAKPAD_BOOTSTRAP_PARENT_PORT "com.Breakpad.BootstrapParent"
|
||||||
|
|
||||||
// Optional user-defined function to dec to decide if we should handle
|
// Optional user-defined function to dec to decide if we should handle
|
||||||
// this crash or forward it along.
|
// this crash or forward it along.
|
||||||
// Return true if you want Breakpad to handle it.
|
// Return true if you want Breakpad to handle it.
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#import "OnDemandServer.h"
|
#import "OnDemandServer.h"
|
||||||
|
#import "Breakpad.h"
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#define PRINT_MACH_RESULT(result_, message_) \
|
#define PRINT_MACH_RESULT(result_, message_) \
|
||||||
|
@ -81,7 +82,7 @@ kern_return_t OnDemandServer::Initialize(const char *server_command,
|
||||||
|
|
||||||
mach_port_t bootstrap_subset_port;
|
mach_port_t bootstrap_subset_port;
|
||||||
kr = bootstrap_subset(bootstrap_port, self_task, &bootstrap_subset_port);
|
kr = bootstrap_subset(bootstrap_port, self_task, &bootstrap_subset_port);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_subset(): ");
|
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_subset(): ");
|
||||||
return kr;
|
return kr;
|
||||||
}
|
}
|
||||||
|
@ -94,9 +95,9 @@ kern_return_t OnDemandServer::Initialize(const char *server_command,
|
||||||
// recover this port and set it as its own bootstrap port in Inspector.mm
|
// recover this port and set it as its own bootstrap port in Inspector.mm
|
||||||
// Inspector::ResetBootstrapPort.
|
// Inspector::ResetBootstrapPort.
|
||||||
kr = bootstrap_register(bootstrap_subset_port,
|
kr = bootstrap_register(bootstrap_subset_port,
|
||||||
const_cast<char*>("BootstrapParentPort"),
|
const_cast<char*>(BREAKPAD_BOOTSTRAP_PARENT_PORT),
|
||||||
bootstrap_port);
|
bootstrap_port);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_register(): ");
|
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_register(): ");
|
||||||
return kr;
|
return kr;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +107,7 @@ kern_return_t OnDemandServer::Initialize(const char *server_command,
|
||||||
geteuid(), // server uid
|
geteuid(), // server uid
|
||||||
true,
|
true,
|
||||||
&server_port_);
|
&server_port_);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_create_server(): ");
|
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_create_server(): ");
|
||||||
return kr;
|
return kr;
|
||||||
}
|
}
|
||||||
|
@ -118,13 +119,13 @@ kern_return_t OnDemandServer::Initialize(const char *server_command,
|
||||||
kr = bootstrap_create_service(server_port_,
|
kr = bootstrap_create_service(server_port_,
|
||||||
const_cast<char*>(service_name),
|
const_cast<char*>(service_name),
|
||||||
&service_port_);
|
&service_port_);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_create_service(): ");
|
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_create_service(): ");
|
||||||
|
|
||||||
// perhaps the service has already been created - try to look it up
|
// perhaps the service has already been created - try to look it up
|
||||||
kr = bootstrap_look_up(bootstrap_port, (char*)service_name, &service_port_);
|
kr = bootstrap_look_up(bootstrap_port, (char*)service_name, &service_port_);
|
||||||
|
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_look_up(): ");
|
PRINT_BOOTSTRAP_RESULT(kr, "bootstrap_look_up(): ");
|
||||||
Unregister(); // clean up server port
|
Unregister(); // clean up server port
|
||||||
return kr;
|
return kr;
|
||||||
|
|
|
@ -175,7 +175,7 @@ class Inspector {
|
||||||
// (ensuring that children like the sender will inherit it), and saves the
|
// (ensuring that children like the sender will inherit it), and saves the
|
||||||
// subset in bootstrap_subset_port_ for use by ServiceCheckIn and
|
// subset in bootstrap_subset_port_ for use by ServiceCheckIn and
|
||||||
// ServiceCheckOut.
|
// ServiceCheckOut.
|
||||||
void ResetBootstrapPort();
|
kern_return_t ResetBootstrapPort();
|
||||||
|
|
||||||
kern_return_t ServiceCheckIn(const char *receive_port_name);
|
kern_return_t ServiceCheckIn(const char *receive_port_name);
|
||||||
kern_return_t ServiceCheckOut(const char *receive_port_name);
|
kern_return_t ServiceCheckOut(const char *receive_port_name);
|
||||||
|
|
|
@ -203,9 +203,12 @@ void ConfigFile::WriteFile(const SimpleStringDictionary *configurationParameters
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
void Inspector::Inspect(const char *receive_port_name) {
|
void Inspector::Inspect(const char *receive_port_name) {
|
||||||
ResetBootstrapPort();
|
kern_return_t result = ResetBootstrapPort();
|
||||||
|
if (result != KERN_SUCCESS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
kern_return_t result = ServiceCheckIn(receive_port_name);
|
result = ServiceCheckIn(receive_port_name);
|
||||||
|
|
||||||
if (result == KERN_SUCCESS) {
|
if (result == KERN_SUCCESS) {
|
||||||
result = ReadMessages();
|
result = ReadMessages();
|
||||||
|
@ -243,7 +246,7 @@ void Inspector::Inspect(const char *receive_port_name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
void Inspector::ResetBootstrapPort() {
|
kern_return_t Inspector::ResetBootstrapPort() {
|
||||||
// A reasonable default, in case anything fails.
|
// A reasonable default, in case anything fails.
|
||||||
bootstrap_subset_port_ = bootstrap_port;
|
bootstrap_subset_port_ = bootstrap_port;
|
||||||
|
|
||||||
|
@ -254,29 +257,31 @@ void Inspector::ResetBootstrapPort() {
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != KERN_SUCCESS) {
|
||||||
NSLog(@"ResetBootstrapPort: task_get_bootstrap_port failed: %s (%d)",
|
NSLog(@"ResetBootstrapPort: task_get_bootstrap_port failed: %s (%d)",
|
||||||
mach_error_string(kr), kr);
|
mach_error_string(kr), kr);
|
||||||
return;
|
return kr;
|
||||||
}
|
}
|
||||||
|
|
||||||
mach_port_t bootstrap_parent_port;
|
mach_port_t bootstrap_parent_port;
|
||||||
kr = bootstrap_look_up(bootstrap_subset_port_,
|
kr = bootstrap_look_up(bootstrap_subset_port_,
|
||||||
"BootstrapParentPort",
|
const_cast<char*>(BREAKPAD_BOOTSTRAP_PARENT_PORT),
|
||||||
&bootstrap_parent_port);
|
&bootstrap_parent_port);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != BOOTSTRAP_SUCCESS) {
|
||||||
NSLog(@"ResetBootstrapPort: bootstrap_look_up failed: %s (%d)",
|
NSLog(@"ResetBootstrapPort: bootstrap_look_up failed: %s (%d)",
|
||||||
bootstrap_strerror(kr), kr);
|
bootstrap_strerror(kr), kr);
|
||||||
return;
|
return kr;
|
||||||
}
|
}
|
||||||
|
|
||||||
kr = task_set_bootstrap_port(self_task, bootstrap_parent_port);
|
kr = task_set_bootstrap_port(self_task, bootstrap_parent_port);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != KERN_SUCCESS) {
|
||||||
NSLog(@"ResetBootstrapPort: task_set_bootstrap_port failed: %s (%d)",
|
NSLog(@"ResetBootstrapPort: task_set_bootstrap_port failed: %s (%d)",
|
||||||
mach_error_string(kr), kr);
|
mach_error_string(kr), kr);
|
||||||
return;
|
return kr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some things access the bootstrap port through this global variable
|
// Some things access the bootstrap port through this global variable
|
||||||
// instead of calling task_get_bootstrap_port.
|
// instead of calling task_get_bootstrap_port.
|
||||||
bootstrap_port = bootstrap_parent_port;
|
bootstrap_port = bootstrap_parent_port;
|
||||||
|
|
||||||
|
return KERN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
Loading…
Reference in a new issue