From 76dc2a8f7cd18460f40c03c0c3f750a23d2775b0 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 21 Sep 2014 10:06:01 +1000 Subject: [PATCH] Fix Some Memory Leaks diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java index c624190..d617228 100644 --- a/src/main/java/net/minecraft/server/EnchantmentManager.java +++ b/src/main/java/net/minecraft/server/EnchantmentManager.java @@ -166,7 +166,10 @@ public class EnchantmentManager { if (entity instanceof EntityHuman) { a((EnchantmentModifier) EnchantmentManager.d, entityliving.bz()); } - + // Spigot start + d.b = null; + d.a = null; + // Spigot end } public static void b(EntityLiving entityliving, Entity entity) { @@ -179,7 +182,10 @@ public class EnchantmentManager { if (entityliving instanceof EntityHuman) { a((EnchantmentModifier) EnchantmentManager.e, entityliving.bz()); } - + // Spigot start + e.a = null; + e.b = null; + // Spigot end } public static int a(EntityLiving entityliving) { diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java index 5ef61d9..214c0ca 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1,5 +1,6 @@ package net.minecraft.server; +import java.lang.ref.WeakReference; // Spigot import java.util.Iterator; import java.util.List; import java.util.UUID; @@ -24,7 +25,7 @@ public abstract class EntityInsentient extends EntityLiving { protected NavigationAbstract navigation; public PathfinderGoalSelector goalSelector; // PAIL protected final to public public PathfinderGoalSelector targetSelector; // PAIL protected final to public - private EntityLiving goalTarget; + private WeakReference goalTarget = new WeakReference(null); private EntitySenses bi; private ItemStack[] equipment = new ItemStack[5]; public float[] dropChances = new float[5]; @@ -83,7 +84,7 @@ public abstract class EntityInsentient extends EntityLiving { } public EntityLiving getGoalTarget() { - return this.goalTarget; + return this.goalTarget.get(); // Spigot } public void setGoalTarget(EntityLiving entityliving) { @@ -116,7 +117,7 @@ public abstract class EntityInsentient extends EntityLiving { entityliving = null; } } - this.goalTarget = entityliving; + this.goalTarget = new WeakReference(entityliving); // Spigot // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java index b4eb893..e34f0f1 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -169,6 +169,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { public void close(IChatBaseComponent ichatbasecomponent) { // Spigot Start this.preparing = false; + this.h.clear(); // Spigot End if (this.i.isOpen()) { this.i.close(); // We can't wait as this may be called from an event loop. diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java index d1e77a8..d6fc521 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java @@ -3,7 +3,7 @@ package net.minecraft.server; public class PathfinderGoalSwell extends PathfinderGoal { EntityCreeper a; - EntityLiving b; + // EntityLiving b; // Spigot public PathfinderGoalSwell(EntityCreeper entitycreeper) { this.a = entitycreeper; @@ -18,22 +18,25 @@ public class PathfinderGoalSwell extends PathfinderGoal { public void c() { this.a.getNavigation().n(); - this.b = this.a.getGoalTarget(); + // this.b = this.a.getGoalTarget(); // Spigot } public void d() { - this.b = null; + // this.b = null; // Spigot } public void e() { - if (this.b == null) { + // Spigot start + EntityLiving b = this.a.getGoalTarget(); + if (b == null) { this.a.a(-1); - } else if (this.a.h(this.b) > 49.0D) { + } else if (this.a.h(b) > 49.0D) { this.a.a(-1); - } else if (!this.a.getEntitySenses().a(this.b)) { + } else if (!this.a.getEntitySenses().a(b)) { this.a.a(-1); } else { this.a.a(1); } + // Spigot end } } -- 2.1.0