Browse Source

Merge branch '6.2.x'

# Conflicts:
#	spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java
pull/34993/merge
Juergen Hoeller 1 month ago
parent
commit
eadc5b09ac
  1. 2
      spring-aop/src/main/java/org/springframework/aop/ProxyMethodInvocation.java
  2. 11
      spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java

2
spring-aop/src/main/java/org/springframework/aop/ProxyMethodInvocation.java

@ -61,7 +61,7 @@ public interface ProxyMethodInvocation extends MethodInvocation {
MethodInvocation invocableClone(@Nullable Object... arguments); MethodInvocation invocableClone(@Nullable Object... arguments);
/** /**
* Set the arguments to be used on subsequent invocations in the any advice * Set the arguments to be used on subsequent invocations in any advice
* in this chain. * in this chain.
* @param arguments the argument array * @param arguments the argument array
*/ */

11
spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java

@ -609,7 +609,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
* @param task the update operation * @param task the update operation
* @return the result of the operation * @return the result of the operation
*/ */
public <T> @Nullable T doTask(final int hash, final @Nullable Object key, final Task<T> task) { private <T> @Nullable T doTask(final int hash, final @Nullable Object key, final Task<T> task) {
boolean resize = task.hasOption(TaskOption.RESIZE); boolean resize = task.hasOption(TaskOption.RESIZE);
if (task.hasOption(TaskOption.RESTRUCTURE_BEFORE)) { if (task.hasOption(TaskOption.RESTRUCTURE_BEFORE)) {
restructureIfNecessary(resize); restructureIfNecessary(resize);
@ -674,7 +674,6 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
} }
private void restructure(boolean allowResize, @Nullable Reference<K, V> ref) { private void restructure(boolean allowResize, @Nullable Reference<K, V> ref) {
boolean needsResize;
lock(); lock();
try { try {
int expectedCount = this.count.get(); int expectedCount = this.count.get();
@ -690,7 +689,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
// Estimate new count, taking into account count inside lock and items that // Estimate new count, taking into account count inside lock and items that
// will be purged. // will be purged.
needsResize = (expectedCount > 0 && expectedCount >= this.resizeThreshold); boolean needsResize = (expectedCount > 0 && expectedCount >= this.resizeThreshold);
boolean resizing = false; boolean resizing = false;
int restructureSize = this.references.length; int restructureSize = this.references.length;
if (allowResize && needsResize && restructureSize < MAXIMUM_SEGMENT_SIZE) { if (allowResize && needsResize && restructureSize < MAXIMUM_SEGMENT_SIZE) {
@ -731,8 +730,8 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
while (ref != null) { while (ref != null) {
if (!toPurge.contains(ref)) { if (!toPurge.contains(ref)) {
Entry<K, V> entry = ref.get(); Entry<K, V> entry = ref.get();
// Also filter out null references that are now null // Also filter out null references that are now null:
// they should be polled from the queue in a later restructure call. // They should be polled from the queue in a later restructure call.
if (entry != null) { if (entry != null) {
purgedRef = this.referenceManager.createReference( purgedRef = this.referenceManager.createReference(
entry, ref.getHash(), purgedRef); entry, ref.getHash(), purgedRef);
@ -744,7 +743,7 @@ public class ConcurrentReferenceHashMap<K, V> extends AbstractMap<K, V> implemen
this.references[i] = purgedRef; this.references[i] = purgedRef;
} }
} }
this.count.set(Math.max(newCount, 0)); this.count.set(newCount);
} }
finally { finally {
unlock(); unlock();

Loading…
Cancel
Save