package jenkins.slaves; import hudson.Extension; import jenkins.util.SystemProperties; import hudson.init.Terminator; import hudson.model.Computer; import org.jenkinsci.remoting.nio.NioChannelHub; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * Singleton holder of {@link NioChannelHub} * * @author Kohsuke Kawaguchi */ @Extension public class NioChannelSelector { private NioChannelHub hub; public NioChannelSelector() { try { if (!DISABLED) { this.hub = new NioChannelHub(Computer.threadPoolForRemoting); Computer.threadPoolForRemoting.submit(hub); } } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to launch NIO hub",e); this.hub = null; DISABLED = true; } } public NioChannelHub getHub() { return hub; } @Terminator public void cleanUp() throws IOException { if (hub!=null) { hub.close(); hub = null; } } /** * Escape hatch to disable use of NIO. */ public static boolean DISABLED = SystemProperties.getBoolean(NioChannelSelector.class.getName()+".disabled"); private static final Logger LOGGER = Logger.getLogger(NioChannelSelector.class.getName()); }