From bb205ced5481430eae726b89a879f6714cde680b Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 9 Jan 2018 23:16:35 +1300 Subject: [PATCH] #1235 - Thread deadlock on L2 cache load of many property --- .../server/loadcontext/DLoadManyContext.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java index f5412939f..a1fb38a39 100644 --- a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java +++ b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java @@ -211,8 +211,14 @@ public class DLoadManyContext extends DLoadBaseContext implements LoadManyContex BeanDescriptor parentDesc = context.desc.getBeanDescriptor(ownerBean.getClass()); Object parentId = parentDesc.getId(ownerBean); if (parentDesc.cacheManyPropLoad(context.property, bc, parentId, context.parent.isReadOnly())) { - // we loaded the bean from cache - list.remove(bc); + // we loaded the bean collection from cache so remove it from the buffer + for (int i = 0; i < list.size(); i++) { + // find it using instance equality - avoiding equals() and potential deadlock issue + if (list.get(i) == bc) { + list.remove(i); + return; + } + } return; } }