From 7def1ad210cd85f2db6c62bdd470582bf237ad1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Andr=C3=A9=20Vadla=20Ravn=C3=A5s?= Date: Wed, 4 Sep 2019 02:21:12 +0200 Subject: [PATCH] Make DeviceManager.close() cancellable --- frida/__init__.py | 5 +++-- src/_frida.c | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/frida/__init__.py b/frida/__init__.py index 334abad..fbc08c6 100644 --- a/frida/__init__.py +++ b/frida/__init__.py @@ -94,8 +94,9 @@ def enumerate_devices(**kwargs): return get_device_manager().enumerate_devices(**kwargs) -def shutdown(**kwargs): - get_device_manager()._impl.close(**kwargs) +@core.cancellable +def shutdown(): + get_device_manager()._impl.close() global _device_manager diff --git a/src/_frida.c b/src/_frida.c index afecf7d..8b4dd11 100644 --- a/src/_frida.c +++ b/src/_frida.c @@ -1826,9 +1826,13 @@ PyDeviceManager_dealloc (PyDeviceManager * self) static PyObject * PyDeviceManager_close (PyDeviceManager * self) { + GError * error = NULL; + Py_BEGIN_ALLOW_THREADS - frida_device_manager_close_sync (PY_GOBJECT_HANDLE (self), NULL, NULL); + frida_device_manager_close_sync (PY_GOBJECT_HANDLE (self), g_cancellable_get_current (), &error); Py_END_ALLOW_THREADS + if (error != NULL) + return PyFrida_raise (error); Py_RETURN_NONE; }