SoftCache NullPointerException in has? with many threads

Description

"cell" can be null on this call to SoftReference.get():
https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L501

If the cache did not contain "item" in the call to (get cache item) in the let binding, but another thread pre-empts and adds it before the subsequent call to contains?, we'll attempt to call .get() on nil.

Would it perhaps be sufficient to just check whether cell is nil instead of calling contains? in the check on the previous line?

Environment

Linux, Oracle JRE 1.6

Activity

Show:
Ambrose Bonnaire-Sergeant
August 4, 2014, 9:56 PM
Paul Stadig
February 9, 2013, 12:13 PM

Good catch!

This is rather simple to reproduce:

The attached patch fixes the issue, by not referring back to the cache after attempting to pull out a SoftReference.

Completed

Assignee

Fogus

Reporter

import

Labels

None

Approval

None

Patch

Code

Priority

Major