aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2012-05-05 19:43:06 +0000
committerDean Camera <dean@fourwalledcubicle.com>2012-05-05 19:43:06 +0000
commit2d98e5499b42ca4feda390d5bd867aa956bf7f11 (patch)
treed1a8135ba0d44fe6dcfc9c38b329e70d5cbece07 /LUFA/Drivers/USB
parent46d511c021011d051c7f19ab4129a8591735327a (diff)
downloadlufa-2d98e5499b42ca4feda390d5bd867aa956bf7f11.tar.gz
lufa-2d98e5499b42ca4feda390d5bd867aa956bf7f11.tar.bz2
lufa-2d98e5499b42ca4feda390d5bd867aa956bf7f11.zip
Fixed possible deadlock in the CDC device driver if the USB connection is dropped while the CDC_REQ_SetLineEncoding control request is being processed by the stack (thanks to Jonathan Hudgins).
Diffstat (limited to 'LUFA/Drivers/USB')
-rw-r--r--LUFA/Drivers/USB/Class/Device/CDCClassDevice.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c b/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c
index a16949cfd..ff0f9bb55 100644
--- a/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c
+++ b/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c
@@ -69,8 +69,12 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInter
{
Endpoint_ClearSETUP();
- while (!(Endpoint_IsOUTReceived()));
-
+ while (!(Endpoint_IsOUTReceived()))
+ {
+ if (USB_DeviceState == DEVICE_STATE_Unattached)
+ return;
+ }
+
CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE();
CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8();
CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8();