You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/05/12 19:31:34 UTC
(commons-lang) branch master updated: Make LockVisitor.acceptReadLocked(FailableConsumer) null-safe
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push:
new b9f15bc00 Make LockVisitor.acceptReadLocked(FailableConsumer) null-safe
b9f15bc00 is described below
commit b9f15bc007be2bb0ba9633559482396e0352785a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun May 12 15:31:29 2024 -0400
Make LockVisitor.acceptReadLocked(FailableConsumer) null-safe
Make LockVisitor.applyWriteLocked(FailableConsumer) null-safe
---
src/changes/changes.xml | 2 ++
.../apache/commons/lang3/concurrent/locks/LockingVisitors.java | 9 ++++++---
.../commons/lang3/concurrent/locks/LockingVisitorsTest.java | 2 ++
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 359100624..11a977dbc 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -126,6 +126,8 @@ The <action> type attribute can be add,update,fix,remove.
<action type="fix" dev="ggregory" due-to="Stephan Peters, Gary Gregory, Bernd">StringUtils.stripAccents() should handle ligatures, UTF32 math blocks, etc. #1201.</action>
<action issue="LANG-1524" type="fix" dev="ggregory" due-to="kijong.youn, Aakash Gupta, Gary Gregory">TypeUtils.toString(Type) StackOverflowError for an inner class in the inner class parameterized enclosing class #657.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate SystemUtils.getUserName(String) in favor of SystemProperties.getUserName(Supplier).</action>
+ <action type="fix" dev="ggregory" due-to="Gary Gregory">Make LockVisitor.acceptReadLocked(FailableConsumer) null-safe.</action>
+ <action type="fix" dev="ggregory" due-to="Gary Gregory">Make LockVisitor.applyWriteLocked(FailableConsumer) null-safe.</action>
<!-- UPDATE -->
<action type="update" dev="sebb" due-to="Dependabot">Bump commons-parent from 64 to 69 #1194.</action>
<action type="update" dev="ggregory" due-to="Dependabot">Bump org.codehaus.mojo:exec-maven-plugin from 3.1.1 to 3.2.0 #1175.</action>
diff --git a/src/main/java/org/apache/commons/lang3/concurrent/locks/LockingVisitors.java b/src/main/java/org/apache/commons/lang3/concurrent/locks/LockingVisitors.java
index 400eb1a77..d83f52350 100644
--- a/src/main/java/org/apache/commons/lang3/concurrent/locks/LockingVisitors.java
+++ b/src/main/java/org/apache/commons/lang3/concurrent/locks/LockingVisitors.java
@@ -26,6 +26,7 @@ import java.util.function.Supplier;
import org.apache.commons.lang3.function.Failable;
import org.apache.commons.lang3.function.FailableConsumer;
import org.apache.commons.lang3.function.FailableFunction;
+import org.apache.commons.lang3.function.Suppliers;
/**
* Combines the monitor and visitor pattern to work with {@link java.util.concurrent.locks.Lock locked objects}. Locked
@@ -262,10 +263,12 @@ public class LockingVisitors {
* @see #acceptWriteLocked(FailableConsumer)
*/
protected void lockAcceptUnlock(final Supplier<Lock> lockSupplier, final FailableConsumer<O, ?> consumer) {
- final Lock lock = lockSupplier.get();
+ final Lock lock = Objects.requireNonNull(Suppliers.get(lockSupplier), "lock");
lock.lock();
try {
- consumer.accept(object);
+ if (consumer != null) {
+ consumer.accept(object);
+ }
} catch (final Throwable t) {
throw Failable.rethrow(t);
} finally {
@@ -289,7 +292,7 @@ public class LockingVisitors {
* @see #applyWriteLocked(FailableFunction)
*/
protected <T> T lockApplyUnlock(final Supplier<Lock> lockSupplier, final FailableFunction<O, T, ?> function) {
- final Lock lock = lockSupplier.get();
+ final Lock lock = Objects.requireNonNull(Suppliers.get(lockSupplier), "lock");
lock.lock();
try {
return function.apply(object);
diff --git a/src/test/java/org/apache/commons/lang3/concurrent/locks/LockingVisitorsTest.java b/src/test/java/org/apache/commons/lang3/concurrent/locks/LockingVisitorsTest.java
index cdf78dae4..74343e891 100644
--- a/src/test/java/org/apache/commons/lang3/concurrent/locks/LockingVisitorsTest.java
+++ b/src/test/java/org/apache/commons/lang3/concurrent/locks/LockingVisitorsTest.java
@@ -93,8 +93,10 @@ public class LockingVisitorsTest extends AbstractLangTest {
final AtomicInteger res = new AtomicInteger();
final ReadWriteLock rwLock = new ReentrantReadWriteLock();
LockingVisitors.create(res, rwLock).acceptReadLocked(AtomicInteger::incrementAndGet);
+ LockingVisitors.create(res, rwLock).acceptReadLocked(null);
assertEquals(1, res.get());
LockingVisitors.create(res, rwLock).acceptWriteLocked(AtomicInteger::incrementAndGet);
+ LockingVisitors.create(res, rwLock).acceptWriteLocked(null);
assertEquals(2, res.get());
}