Menu

#439 NullPointerException in MruCacheStorage

2.3.24
open-fixed
nobody
None
5
2015-09-25
2015-09-25
No

Looks like you had this issue a few years ago, but it appears to have reared its head again.

It isn't critical since the case sensitive checking is only for dev, but it is inconvenient to have to bounce the server to clear it up. It has only happened a couple of times, and I unfortunately cannot reproduce it consistently, though I'm pretty sure it happens in response to a template reload. Given its rarity, I'm assuming it is a thread safety issue.

Caused by: java.lang.NullPointerException
        at freemarker.cache.MruCacheStorage$MruEntry.unlink(MruCacheStorage.java:302)
        at freemarker.cache.MruCacheStorage.unlinkEntryAndInspectIfSoft(MruCacheStorage.java:186)
        at freemarker.cache.MruCacheStorage.relinkEntryAfterStrongHead(MruCacheStorage.java:134)
        at freemarker.cache.MruCacheStorage.get(MruCacheStorage.java:89)
        at freemarker.cache.FileTemplateLoader.isNameCaseCorrect(FileTemplateLoader.java:247)
        at freemarker.cache.FileTemplateLoader.access$300(FileTemplateLoader.java:42)
        at freemarker.cache.FileTemplateLoader$2.run(FileTemplateLoader.java:186)
        at java.security.AccessController.doPrivileged(Native Method)
        at freemarker.cache.FileTemplateLoader.findTemplateSource(FileTemplateLoader.java:167)
        at freemarker.cache.MultiTemplateLoader.findTemplateSource(MultiTemplateLoader.java:62)
        at org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader.findTemplateSource(FreemarkerThemeTemplateLoader.java:37)
        at freemarker.cache.TemplateCache.findTemplateSource(TemplateCache.java:742)
        at freemarker.cache.TemplateCache.lookupTemplateWithAcquisitionStrategy(TemplateCache.java:695)
        at freemarker.cache.TemplateCache.access$500(TemplateCache.java:54)

Discussion

  • Dániel Dékány

    Indeed, FileTemplateLoader.isNameCaseCorrect wasn't properly synchronized! Fixed in the Git repo, thanks! (Note for others that it isn't a bug in MruCacheStorage. This issue pops up if something uses MruCacheStorage without synchronization, as it's not a thread-safe class.)

     
  • Dániel Dékány

    • status: open --> open-fixed
    • Group: 2.3.23 --> 2.3.24
     

Log in to post a comment.

MongoDB Logo MongoDB