diff options
author | Martin Szulecki | 2011-04-28 19:42:21 +0200 |
---|---|---|
committer | Martin Szulecki | 2011-04-28 19:42:21 +0200 |
commit | 8ecfbc77ccaaa0c017aae5d944efec47bd2c6171 (patch) | |
tree | dcb78b94a2098dcf5782cfc0b355df26167947e5 | |
parent | de9cd870f92abe194904291887828fff9401d020 (diff) | |
download | libimobiledevice-8ecfbc77ccaaa0c017aae5d944efec47bd2c6171.tar.gz libimobiledevice-8ecfbc77ccaaa0c017aae5d944efec47bd2c6171.tar.bz2 |
idevicebackup2: Improve disconnect behavior to cleanly disconnect from agent
-rw-r--r-- | src/mobilebackup2.c | 1 | ||||
-rw-r--r-- | 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; |