Don't keep the lockdownd connection open in the gstafcsrc
This commit is contained in:
parent
81709243d4
commit
f7adb4161a
@ -140,7 +140,6 @@ static void gst_afc_src_init(GstAfcSrc* element, GstAfcSrcClass* gclass) {
|
|||||||
element->afc_port_ = 0;
|
element->afc_port_ = 0;
|
||||||
element->device_ = NULL;
|
element->device_ = NULL;
|
||||||
element->file_handle_ = 0;
|
element->file_handle_ = 0;
|
||||||
element->lockdown_ = NULL;
|
|
||||||
element->buffer_ = NULL;
|
element->buffer_ = NULL;
|
||||||
element->buffer_is_valid_ = FALSE;
|
element->buffer_is_valid_ = FALSE;
|
||||||
element->buffer_length_ = 0;
|
element->buffer_length_ = 0;
|
||||||
@ -160,9 +159,6 @@ static void gst_afc_src_finalize(GObject* object) {
|
|||||||
if (self->afc_)
|
if (self->afc_)
|
||||||
afc_client_free(self->afc_);
|
afc_client_free(self->afc_);
|
||||||
|
|
||||||
if (self->lockdown_)
|
|
||||||
lockdownd_client_free(self->lockdown_);
|
|
||||||
|
|
||||||
if (self->device_)
|
if (self->device_)
|
||||||
idevice_free(self->device_);
|
idevice_free(self->device_);
|
||||||
|
|
||||||
@ -232,25 +228,31 @@ static gboolean gst_afc_src_start(GstBaseSrc* src) {
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lockdownd_client_t lockdown;
|
||||||
|
|
||||||
lockdownd_error_t lockdown_err =
|
lockdownd_error_t lockdown_err =
|
||||||
lockdownd_client_new_with_handshake(self->device_, &self->lockdown_, "GstAfcSrc");
|
lockdownd_client_new_with_handshake(self->device_, &lockdown, "GstAfcSrc");
|
||||||
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
||||||
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("lockdown error: %d", lockdown_err), (NULL));
|
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("lockdown error: %d", lockdown_err), (NULL));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lockdown_err = lockdownd_start_service(self->lockdown_, "com.apple.afc", &self->afc_port_);
|
lockdown_err = lockdownd_start_service(lockdown, "com.apple.afc", &self->afc_port_);
|
||||||
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
if (lockdown_err != LOCKDOWN_E_SUCCESS) {
|
||||||
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("lockdown error: %d", lockdown_err), (NULL));
|
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("lockdown error: %d", lockdown_err), (NULL));
|
||||||
|
lockdownd_client_free(lockdown);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
afc_error_t afc_err = afc_client_new(self->device_, self->afc_port_, &self->afc_);
|
afc_error_t afc_err = afc_client_new(self->device_, self->afc_port_, &self->afc_);
|
||||||
if (afc_err != 0) {
|
if (afc_err != 0) {
|
||||||
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("afc error: %d", afc_err), (NULL));
|
GST_ELEMENT_ERROR(src, RESOURCE, NOT_FOUND, ("afc error: %d", afc_err), (NULL));
|
||||||
|
lockdownd_client_free(lockdown);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lockdownd_client_free(lockdown);
|
||||||
|
|
||||||
// Try opening the file
|
// Try opening the file
|
||||||
afc_err = afc_file_open(self->afc_, self->path_, AFC_FOPEN_RDONLY, &self->file_handle_);
|
afc_err = afc_file_open(self->afc_, self->path_, AFC_FOPEN_RDONLY, &self->file_handle_);
|
||||||
if (afc_err != 0) {
|
if (afc_err != 0) {
|
||||||
@ -296,10 +298,6 @@ static GstFlowReturn gst_afc_src_create(GstBaseSrc* src, guint64 offset, guint l
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (err != AFC_E_SUCCESS) {
|
if (err != AFC_E_SUCCESS) {
|
||||||
// Trying to free a lockdownd client that's been disconnected results in
|
|
||||||
// a whole load of "Broken pipe" errors.
|
|
||||||
self->lockdown_ = NULL;
|
|
||||||
|
|
||||||
gst_buffer_unref(buf);
|
gst_buffer_unref(buf);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,6 @@ struct _GstAfcSrc {
|
|||||||
|
|
||||||
gboolean connected_;
|
gboolean connected_;
|
||||||
idevice_t device_;
|
idevice_t device_;
|
||||||
lockdownd_client_t lockdown_;
|
|
||||||
afc_client_t afc_;
|
afc_client_t afc_;
|
||||||
|
|
||||||
uint16_t afc_port_;
|
uint16_t afc_port_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user