struct KernelInterceptState {
KernelProxy* kp;
+ PepperInterface* ppapi;
bool kp_owned;
};
return 1;
s_saved_state = s_state;
s_state.kp = NULL;
+ s_state.ppapi = NULL;
s_state.kp_owned = false;
return 0;
}
if (s_state.kp != NULL)
return 1;
PepperInterface* ppapi = NULL;
- if (instance && get_browser_interface)
+ if (instance && get_browser_interface) {
ppapi = new RealPepperInterface(instance, get_browser_interface);
- return ki_init_interface(kp, ppapi);
+ s_state.ppapi = ppapi;
+ }
+ int rtn = ki_init_interface(kp, ppapi);
+ return rtn;
}
int ki_init_interface(void* kp, void* pepper_interface) {
// If we are going to delete the KernelProxy don't do it
// until we've swapped it out.
- KernelProxy* delete_kp = s_state.kp_owned ? s_state.kp : NULL;
+ KernelInterceptState state_to_delete = s_state;
// Swap out the KernelProxy. This will normally reset the
// proxy to NULL, aside from in test code that has called
// ki_push_state_for_testing().
s_state = s_saved_state;
s_saved_state.kp = NULL;
+ s_saved_state.ppapi = NULL;
s_saved_state.kp_owned = false;
- if (delete_kp)
- delete delete_kp;
+ if (state_to_delete.kp_owned)
+ delete state_to_delete.kp;
+
+ delete state_to_delete.ppapi;
}
nacl_io::KernelProxy* ki_get_proxy() {