From d04ce021b928644cef3b27e025ffc8dae413cd71 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Sun, 20 Oct 2019 03:35:34 +0200 Subject: Ignore device add events after device entered restore mode --- src/common.h | 1 + src/idevicerestore.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/common.h b/src/common.h index dbd2a41..e8e4d44 100644 --- a/src/common.h +++ b/src/common.h @@ -109,6 +109,7 @@ struct idevicerestore_client_t { void* idevice_e_ctx; mutex_t device_event_mutex; cond_t device_event_cond; + int ignore_device_add_events; }; extern struct idevicerestore_mode_t idevicerestore_modes[]; diff --git a/src/idevicerestore.c b/src/idevicerestore.c index d7f2a85..2e38933 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -208,6 +208,9 @@ static void idevice_event_cb(const idevice_event_t *event, void *userdata) { struct idevicerestore_client_t *client = (struct idevicerestore_client_t*)userdata; if (event->event == IDEVICE_DEVICE_ADD) { + if (client->ignore_device_add_events) { + return; + } if (normal_check_mode(client) == 0) { mutex_lock(&client->device_event_mutex); client->mode = &idevicerestore_modes[MODE_NORMAL]; @@ -226,6 +229,7 @@ static void idevice_event_cb(const idevice_event_t *event, void *userdata) mutex_lock(&client->device_event_mutex); client->mode = &idevicerestore_modes[MODE_UNKNOWN]; debug("%s: device " FMT_016llx " (udid: %s) disconnected\n", __func__, client->ecid, client->udid); + client->ignore_device_add_events = 0; cond_signal(&client->device_event_cond); mutex_unlock(&client->device_event_mutex); } @@ -1309,6 +1313,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) // device is finally in restore mode, let's do this if (client->mode->index == MODE_RESTORE) { + client->ignore_device_add_events = 1; info("About to restore device... \n"); result = restore_device(client, build_identity, filesystem); if (result < 0) { -- cgit v1.1-32-gdbae