[
https://issues.apache.org/jira/browse/CAMEL-24269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-24269.
---------------------------------
Resolution: Duplicate
> DefaultStreamCachingStrategy.updateSpool calls lock.lock() in finally instead
> of lock.unlock()
> ----------------------------------------------------------------------------------------------
>
> Key: CAMEL-24269
> URL: https://issues.apache.org/jira/browse/CAMEL-24269
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Guillaume Nodet
> Priority: Major
>
> Found by oscerd during review of PR #24985 (CAMEL-24227). This is a *live
> bug* in existing code, not introduced by the PR.
> h3. Problem
> In {{DefaultStreamCachingStrategy.UtilizationStatistics.updateSpool()}}, the
> {{finally}} block calls {{lock.lock()}} instead of {{lock.unlock()}}:
> {code:java}
> void updateSpool(long size) {
> lock.lock();
> try {
> spoolAverageSize.set(spoolSize.addAndGet(size) /
> spoolCounter.incrementAndGet());
> } finally {
> lock.lock(); // BUG: should be lock.unlock()
> }
> }
> {code}
> {{updateMemory()}} directly above it correctly calls {{lock.unlock()}}.
> h3. Impact
> Because {{lock}} is a {{ReentrantLock}}, the calling thread does not
> self-deadlock — it just leaves the hold count at 2 permanently. However, any
> *other* thread entering {{updateSpool()}} will block forever. This is
> reachable whenever stream-caching statistics are enabled and spooling to disk
> occurs on multiple threads.
> h3. Suggested fix
> Change {{lock.lock()}} to {{lock.unlock()}} in the {{finally}} block.
> h3. References
> * PR [#24985|https://github.com/apache/camel/pull/24985] review comment by
> oscerd
> *
> {{core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultStreamCachingStrategy.java}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)