1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-18 03:52:11 +01:00

OP-980 change how the semaphore is used on PIOS_USB_CheckAvailable to prevent deadlocks

This commit is contained in:
Alessio Morale 2013-06-09 15:30:09 +02:00
parent 5fe1bfbe36
commit 87db5d30b0

View File

@ -179,20 +179,20 @@ bool PIOS_USB_CheckAvailable(__attribute__((unused)) uint32_t id)
usb_found = ((usb_dev->cfg->vsense.gpio->IDR & usb_dev->cfg->vsense.init.GPIO_Pin) != 0) ^ usb_dev->cfg->vsense_active_low;
bool status = usb_found != 0 && transfer_possible ? 1 : 0;
bool reconnect = false;
#ifdef PIOS_INCLUDE_FREERTOS
while (xSemaphoreTakeFromISR(usb_dev->statusCheckSemaphore, NULL) != pdTRUE) {
;
}
if(xSemaphoreTakeFromISR(usb_dev->statusCheckSemaphore, NULL) == pdTRUE) {
#endif
bool reconnect = (lastStatus && !status);
lastStatus = status;
reconnect = (lastStatus && !status);
lastStatus = status;
#ifdef PIOS_INCLUDE_FREERTOS
xSemaphoreGiveFromISR(usb_dev->statusCheckSemaphore, NULL);
xSemaphoreGiveFromISR(usb_dev->statusCheckSemaphore, NULL);
}
#endif
if (reconnect) {
raiseDisconnectionCallbacks();
}
return status;
}