| Index: native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| index cb517347afa5882839f57d115923017af76bbe6d..304017aa7f3dde91c398e4ea9c573f8fb0a83514 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| @@ -21,7 +21,9 @@ using namespace nacl_io;
|
| return x; \
|
| }
|
|
|
| +static ScopedKernelProxy* s_scoped_kp;
|
| static KernelProxy* s_kp;
|
| +static bool s_kp_owned;
|
|
|
| void ki_init(void* kp) {
|
| ki_init_ppapi(kp, 0, NULL);
|
| @@ -32,8 +34,15 @@ void ki_init_ppapi(void* kp,
|
| PPB_GetInterface get_browser_interface) {
|
| kernel_wrap_init();
|
|
|
| - if (kp == NULL) kp = new KernelProxy();
|
| - s_kp = static_cast<KernelProxy*>(kp);
|
| + if (kp == NULL) {
|
| + s_kp = new KernelProxy();
|
| + s_kp_owned = true;
|
| + } else {
|
| + s_kp = static_cast<KernelProxy*>(kp);
|
| + s_kp_owned = false;
|
| + }
|
| +
|
| + s_scoped_kp = new ScopedKernelProxy(s_kp);
|
|
|
| PepperInterface* ppapi = NULL;
|
| if (instance && get_browser_interface)
|
| @@ -48,7 +57,10 @@ int ki_is_initialized() {
|
|
|
| void ki_uninit() {
|
| kernel_wrap_uninit();
|
| + if (s_kp_owned)
|
| + delete s_scoped_kp;
|
| s_kp = NULL;
|
| + s_scoped_kp = NULL;
|
| }
|
|
|
| int ki_chdir(const char* path) {
|
| @@ -257,6 +269,21 @@ int ki_tcsetattr(int fd, int optional_actions,
|
| return s_kp->tcsetattr(fd, optional_actions, termios_p);
|
| }
|
|
|
| +int ki_kill(pid_t pid, int sig) {
|
| + ON_NOSYS_RETURN(-1);
|
| + return s_kp->kill(pid, sig);
|
| +}
|
| +
|
| +sighandler_t ki_signal(int signum, sighandler_t handler) {
|
| + ON_NOSYS_RETURN(SIG_ERR);
|
| + return s_kp->sigset(signum, handler);
|
| +}
|
| +
|
| +sighandler_t ki_sigset(int signum, sighandler_t handler) {
|
| + ON_NOSYS_RETURN(SIG_ERR);
|
| + return s_kp->sigset(signum, handler);
|
| +}
|
| +
|
| #ifdef PROVIDES_SOCKET_API
|
| // Socket Functions
|
| int ki_accept(int fd, struct sockaddr* addr, socklen_t* len) {
|
|
|