From 1331cce08a6e899b15382dd1c6110565ed1b34c5 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 13 May 2010 07:43:18 +0000
Subject: [PATCH] Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT
 is enabled and the control endpoint is not properly selected when the ISR
 completes.

---
 LUFA/Drivers/USB/LowLevel/USBInterrupt.c | 7 +++++--
 LUFA/Drivers/USB/LowLevel/USBInterrupt.h | 1 +
 LUFA/ManPages/ChangeLog.txt              | 2 ++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
index 43df5f61a..1c6d6caa7 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.c
@@ -237,10 +237,13 @@ ISR(USB_COM_vect, ISR_BLOCK)
 
 	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
 	USB_INT_Disable(USB_INT_RXSTPI);
-	sei();
 
-	USB_USBTask();
+	NONATOMIC_BLOCK(NONATOMIC_FORCEOFF)
+	{
+		USB_Device_ProcessControlRequest();
+	}
 
+	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
 	USB_INT_Enable(USB_INT_RXSTPI);
 	Endpoint_SelectEndpoint(PrevSelectedEndpoint);
 }
diff --git a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
index a191a2994..6f8bf7cea 100644
--- a/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
+++ b/LUFA/Drivers/USB/LowLevel/USBInterrupt.h
@@ -44,6 +44,7 @@
 	/* Includes: */
 		#include <avr/io.h>
 		#include <avr/interrupt.h>
+		#include <util/atomic.h>
 		#include <stdbool.h>
 		
 		#include "../../../Common/Common.h"
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 16925c00b..09a168dc1 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -15,6 +15,8 @@
   *    LIBUSB_DRIVER_COMPAT, as it applies to all software on all platforms using the libUSB driver
   *
   *  <b>Fixed:</b>
+  *  - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
+  *    selected when the ISR completes
   *
   *  \section Sec_ChangeLog100512 Version 100512
   *
-- 
GitLab