From 8ecfbc77ccaaa0c017aae5d944efec47bd2c6171 Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Thu, 28 Apr 2011 19:42:21 +0200 Subject: idevicebackup2: Improve disconnect behavior to cleanly disconnect from agent --- src/mobilebackup2.c | 1 - tools/idevicebackup2.c | 14 ++++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mobilebackup2.c b/src/mobilebackup2.c index a595b01..c72823e 100644 --- a/src/mobilebackup2.c +++ b/src/mobilebackup2.c @@ -116,7 +116,6 @@ mobilebackup2_error_t mobilebackup2_client_free(mobilebackup2_client_t client) return MOBILEBACKUP2_E_INVALID_ARG; mobilebackup2_error_t err = MOBILEBACKUP2_E_SUCCESS; if (client->parent) { - device_link_service_disconnect(client->parent); err = mobilebackup2_error(device_link_service_client_free(client->parent)); } free(client); diff --git a/tools/idevicebackup2.c b/tools/idevicebackup2.c index 442ce14..47dd4f2 100644 --- a/tools/idevicebackup2.c +++ b/tools/idevicebackup2.c @@ -1577,6 +1577,8 @@ checkpoint: if (err != MOBILEBACKUP2_E_SUCCESS) { printf("Could not send status response, error %d\n", err); } + } else if (!strcmp(dlmsg, "DLMessageDisconnect")) { + break; } else if (!strcmp(dlmsg, "DLMessageProcessMessage")) { node_tmp = plist_array_get_item(message, 1); if (plist_get_node_type(node_tmp) != PLIST_DICT) { @@ -1616,7 +1618,11 @@ checkpoint: printf("%s", str); free(str); } - break; + + err = mobilebackup2_send_status_response(mobilebackup2, 0, NULL, plist_new_dict()); + if (err != MOBILEBACKUP2_E_SUCCESS) { + printf("Could not send status response, error %d\n", err); + } } /* print status */ @@ -1713,15 +1719,15 @@ files_out: client = NULL; } + if (mobilebackup2) + mobilebackup2_client_free(mobilebackup2); + if (afc) afc_client_free(afc); if (np) np_client_free(np); - if (mobilebackup2) - mobilebackup2_client_free(mobilebackup2); - idevice_free(phone); return 0; -- cgit v1.1-32-gdbae