summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2011-04-28 19:42:21 +0200
committerGravatar Martin Szulecki2011-04-28 19:42:21 +0200
commit8ecfbc77ccaaa0c017aae5d944efec47bd2c6171 (patch)
treedcb78b94a2098dcf5782cfc0b355df26167947e5
parentde9cd870f92abe194904291887828fff9401d020 (diff)
downloadlibimobiledevice-8ecfbc77ccaaa0c017aae5d944efec47bd2c6171.tar.gz
libimobiledevice-8ecfbc77ccaaa0c017aae5d944efec47bd2c6171.tar.bz2
idevicebackup2: Improve disconnect behavior to cleanly disconnect from agent
-rw-r--r--src/mobilebackup2.c1
-rw-r--r--tools/idevicebackup2.c14
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;