JBTM-468 is not completely solved.
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery in its shutdown(boolean) method does not stop the _listener, so a call to _listener.stopListener() should be added to it. Otherwise the listener is never stopped and this can cause a leak if the JVM does not terminate between restarts.
Moreover, as Listener threads are always started as daemon threads, I think com.arjuna.ats.internal.arjuna.recovery.Listener.finalize() is quite useless: if the JVM is terminating, the thread is stopped because it's a daemon thread, while in case of restart the Listener is certainly stopped by the restart process (bugs permitting). As it is right now, that finalize() method just causes useless GC overhead.