There is an incorrect calculation of timeout. System.nano is not a clock and it is getting mixed System.currentTimeMillis. System.nanonTime has a different origin of time than System.currentTimeMillis. This comparison results in timing out suspect that has not beeing expired.
The timeout thread is not stopped during disconnect (only shutdown). If we are working in memory it can create phantom suspect events as it might run from disconnect operation and sending the suspect all the way up if the suspect_events is active. The thread is still going even when the stop operation happens.