2014-11-29 00:03:01 +00:00
|
|
|
From 6fd03495f3b5797a699b06523e7ef360c1d58b89 Mon Sep 17 00:00:00 2001
|
2014-11-28 01:17:45 +00:00
|
|
|
From: md_5 <git@md-5.net>
|
|
|
|
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 02eed74..bc7f81e 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;
|
|
|
|
protected final PathfinderGoalSelector goalSelector;
|
|
|
|
protected final PathfinderGoalSelector targetSelector;
|
|
|
|
- private EntityLiving goalTarget;
|
|
|
|
+ private WeakReference<EntityLiving> goalTarget = new WeakReference<EntityLiving>(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>(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
|
|
|
|
|