mirror of
				https://github.com/proxiodev/RedisBungee.git
				synced 2025-11-04 01:28:02 +00:00 
			
		
		
		
	Fix replacing thread pool and move to ScheduledThreadPoolExecutor
This commit is contained in:
		
							parent
							
								
									8f38b5ddb8
								
							
						
					
					
						commit
						6f3a882fa2
					
				@ -59,8 +59,8 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
    private volatile List<String> serverIds;
 | 
					    private volatile List<String> serverIds;
 | 
				
			||||||
    private final AtomicInteger nagAboutServers = new AtomicInteger();
 | 
					    private final AtomicInteger nagAboutServers = new AtomicInteger();
 | 
				
			||||||
    private final AtomicInteger globalPlayerCount = new AtomicInteger();
 | 
					    private final AtomicInteger globalPlayerCount = new AtomicInteger();
 | 
				
			||||||
    private ScheduledTask integrityCheck;
 | 
					    private Future<?> integrityCheck;
 | 
				
			||||||
    private ScheduledTask heartbeatTask;
 | 
					    private Future<?> heartbeatTask;
 | 
				
			||||||
    private boolean usingLua;
 | 
					    private boolean usingLua;
 | 
				
			||||||
    private LuaManager.Script serverToPlayersScript;
 | 
					    private LuaManager.Script serverToPlayersScript;
 | 
				
			||||||
    private LuaManager.Script getPlayerCountScript;
 | 
					    private LuaManager.Script getPlayerCountScript;
 | 
				
			||||||
@ -223,12 +223,14 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
        ThreadFactory factory = ((ThreadPoolExecutor) getExecutorService()).getThreadFactory();
 | 
					        ThreadFactory factory = ((ThreadPoolExecutor) getExecutorService()).getThreadFactory();
 | 
				
			||||||
 | 
					        getExecutorService().shutdownNow();
 | 
				
			||||||
 | 
					        ScheduledExecutorService service;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            Field field = this.getClass().getDeclaredField("executorService");
 | 
					            Field field = Plugin.class.getDeclaredField("service");
 | 
				
			||||||
            field.setAccessible(true);
 | 
					            field.setAccessible(true);
 | 
				
			||||||
            field.set(this, Executors.newFixedThreadPool(24, factory));
 | 
					            field.set(this, service = Executors.newScheduledThreadPool(24, factory));
 | 
				
			||||||
        } catch (Exception e) {
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException("Can't replace BungeeCord thread pool with our own", e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            loadConfig();
 | 
					            loadConfig();
 | 
				
			||||||
@ -265,7 +267,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            serverIds = getCurrentServerIds(true, false);
 | 
					            serverIds = getCurrentServerIds(true, false);
 | 
				
			||||||
            uuidTranslator = new UUIDTranslator(this);
 | 
					            uuidTranslator = new UUIDTranslator(this);
 | 
				
			||||||
            heartbeatTask = getProxy().getScheduler().schedule(this, new Runnable() {
 | 
					            heartbeatTask = service.scheduleAtFixedRate(new Runnable() {
 | 
				
			||||||
                @Override
 | 
					                @Override
 | 
				
			||||||
                public void run() {
 | 
					                public void run() {
 | 
				
			||||||
                    try (Jedis rsc = pool.getResource()) {
 | 
					                    try (Jedis rsc = pool.getResource()) {
 | 
				
			||||||
@ -297,7 +299,7 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
            getProxy().getPluginManager().registerListener(this, dataManager);
 | 
					            getProxy().getPluginManager().registerListener(this, dataManager);
 | 
				
			||||||
            psl = new PubSubListener();
 | 
					            psl = new PubSubListener();
 | 
				
			||||||
            getProxy().getScheduler().runAsync(this, psl);
 | 
					            getProxy().getScheduler().runAsync(this, psl);
 | 
				
			||||||
            integrityCheck = getProxy().getScheduler().schedule(this, new Runnable() {
 | 
					            integrityCheck = service.scheduleAtFixedRate(new Runnable() {
 | 
				
			||||||
                @Override
 | 
					                @Override
 | 
				
			||||||
                public void run() {
 | 
					                public void run() {
 | 
				
			||||||
                    try (Jedis tmpRsc = pool.getResource()) {
 | 
					                    try (Jedis tmpRsc = pool.getResource()) {
 | 
				
			||||||
@ -367,9 +369,8 @@ public final class RedisBungee extends Plugin {
 | 
				
			|||||||
        if (pool != null) {
 | 
					        if (pool != null) {
 | 
				
			||||||
            // Poison the PubSub listener
 | 
					            // Poison the PubSub listener
 | 
				
			||||||
            psl.poison();
 | 
					            psl.poison();
 | 
				
			||||||
            getProxy().getScheduler().cancel(this);
 | 
					            integrityCheck.cancel(true);
 | 
				
			||||||
            integrityCheck.cancel();
 | 
					            heartbeatTask.cancel(true);
 | 
				
			||||||
            heartbeatTask.cancel();
 | 
					 | 
				
			||||||
            getProxy().getPluginManager().unregisterListeners(this);
 | 
					            getProxy().getPluginManager().unregisterListeners(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try (Jedis tmpRsc = pool.getResource()) {
 | 
					            try (Jedis tmpRsc = pool.getResource()) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user