File acsccid-1.1.6-polling-unplug.patch of Package pcsc-acsccid

Index: acsccid-1.1.6/src/ccid_usb.c
===================================================================
--- acsccid-1.1.6.orig/src/ccid_usb.c
+++ acsccid-1.1.6/src/ccid_usb.c
@@ -1808,6 +1808,8 @@ int InterruptRead(int reader_index, int
 		libusb_free_transfer(transfer);
 		DEBUG_CRITICAL2("libusb_submit_transfer failed: %s",
 			libusb_error_name(ret));
+		if (ret == LIBUSB_ERROR_NO_DEVICE)
+			return IFD_NO_SUCH_DEVICE;
 		return IFD_COMMUNICATION_ERROR;
 	}
 
@@ -1827,6 +1829,8 @@ int InterruptRead(int reader_index, int
 			libusb_free_transfer(transfer);
 			DEBUG_CRITICAL2("libusb_handle_events failed: %s",
 				libusb_error_name(ret));
+			if (ret == LIBUSB_ERROR_NO_DEVICE)
+				return IFD_NO_SUCH_DEVICE;
 			return IFD_COMMUNICATION_ERROR;
 		}
 	}
@@ -1881,7 +1885,10 @@ int InterruptRead(int reader_index, int
 			DEBUG_COMM4("InterruptRead (%d/%d): %d",
 				usbDevice[reader_index].bus_number,
 				usbDevice[reader_index].device_address, ret);
-			return_value = IFD_COMMUNICATION_ERROR;
+			if (ret == LIBUSB_TRANSFER_NO_DEVICE)
+				return_value = IFD_NO_SUCH_DEVICE;
+			else
+				return_value = IFD_COMMUNICATION_ERROR;
 	}
 
 	return return_value;