ASYNC_TRANSFER_USER_DATA* user_data = (ASYNC_TRANSFER_USER_DATA*)transfer->user_data;
const UINT32 streamID = stream_id_from_buffer(transfer);
+ ArrayList_Lock(user_data->queue);
switch (transfer->status)
{
-
case LIBUSB_TRANSFER_COMPLETED:
{
int i;
default:
break;
}
+ ArrayList_Unlock(user_data->queue);
}
static const LIBUSB_ENDPOINT_DESCEIPTOR* func_get_ep_desc(LIBUSB_CONFIG_DESCRIPTOR* LibusbConfig,
WLog_ERR(TAG, "[%s]: Invalid transfer->user_data!");
return;
}
-
+ ArrayList_Lock(user_data->queue);
streamID = stream_id_from_buffer(transfer);
if (list_contains(user_data->queue, streamID))
user_data->data = NULL;
ArrayList_Remove(user_data->queue, transfer);
}
+ ArrayList_Unlock(user_data->queue);
}
static BOOL func_set_usbd_status(URBDRC_PLUGIN* urbdrc, UDEVICE* pdev, UINT32* status,
return 0;
}
+
static void libusb_udev_cancel_all_transfer_request(IUDEVICE* idev)
{
UDEVICE* pdev = (UDEVICE*)idev;
static int libusb_udev_cancel_transfer_request(IUDEVICE* idev, UINT32 RequestId)
{
+ int rc = -1;
UDEVICE* pdev = (UDEVICE*)idev;
struct libusb_transfer* transfer;
- URBDRC_PLUGIN* urbdrc;
uint32_t cancelID1 = 0x40000000 | RequestId;
uint32_t cancelID2 = 0x80000000 | RequestId;
if (!idev || !pdev->urbdrc || !pdev->request_queue)
return -1;
+ ArrayList_Lock(pdev->request_queue);
transfer = list_contains(pdev->request_queue, cancelID1);
if (!transfer)
transfer = list_contains(pdev->request_queue, cancelID2);
- if (!transfer)
- return -1;
-
- urbdrc = (URBDRC_PLUGIN*)pdev->urbdrc;
+ if (transfer)
+ {
+ URBDRC_PLUGIN* urbdrc = (URBDRC_PLUGIN*)pdev->urbdrc;
- return func_cancel_xact_request(urbdrc, transfer);
+ rc = func_cancel_xact_request(urbdrc, transfer);
+ }
+ ArrayList_Unlock(pdev->request_queue);
+ return rc;
}
BASIC_STATE_FUNC_DEFINED(channelManager, IWTSVirtualChannelManager*)