in src/main/java/com/fazecast/jSerialComm/SerialPort.java [2104:2147]
public final void stopListening()
{
if (!eventListenerRunning)
return;
eventListenerRunning = false;
// Clear all timeouts and event masks to allow listening threads to return
int oldTimeoutMode = timeoutMode, oldEventFlags = eventFlags;
timeoutMode = TIMEOUT_NONBLOCKING;
eventFlags = 0;
if (androidPort != null)
{
androidPort.setEventListeningStatus(false);
androidPort.configPort(SerialPort.this);
}
else
{
setEventListeningStatus(portHandle, false);
configPort(portHandle);
}
// Wait until the event-reading thread returns. This thread MUST return or the serial port will
// be in an unspecified, possibly unrecoverable state
try
{
if (!Thread.currentThread().equals(serialEventThread))
do
{
serialEventThread.join(500);
if (serialEventThread.isAlive())
serialEventThread.interrupt();
} while (serialEventThread.isAlive());
}
catch (InterruptedException e) { Thread.currentThread().interrupt(); }
serialEventThread = null;
// Reset the previously specified timeouts and event flags
timeoutMode = oldTimeoutMode;
eventFlags = oldEventFlags;
if (androidPort != null)
androidPort.configPort(SerialPort.this);
else
configPort(portHandle);
}