Fixed possible deadlock in the CDC device driver if the USB connection is dropped...
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 5 May 2012 19:43:06 +0000 (19:43 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 5 May 2012 19:43:06 +0000 (19:43 +0000)
LUFA/DoxygenPages/ChangeLog.txt
LUFA/Drivers/USB/Class/Device/CDCClassDevice.c

index 5770208..e92a0fc 100644 (file)
@@ -53,6 +53,8 @@
   *   - Fixed inverted LED logic in the OLIMEX162 board LED driver
   *   - Fixed incorrect reponse to GET STATUS requests in device mode if NO_DEVICE_SELF_POWER or NO_DEVICE_REMOTE_WAKEUP tokens are defined (thanks to Georg Glock)
   *   - Fixed inverted LED logic in the USB2AX board LED driver
+  *   - 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)
   *  - Library Applications:
   *   - Fixed error in the AVRISP-MKII programmer when ISP mode is used at 64KHz (thanks to Ben R. Porter)
   *   - Fixed AVRISP-MKII programmer project failing to compile for the U4 chips when VTARGET_ADC_CHANNEL is defined to an invalid channel and NO_VTARGET_DETECT is
index a16949c..ff0f9bb 100644 (file)
@@ -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();