[ https://issues.apache.org/jira/browse/COLLECTIONS-3?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12509351 ]
Henri Yandell commented on COLLECTIONS-3: ----------------------------------------- That should be: synchronized(map) { Playing with SoakLRUMap, not doing that gives a ConcurrentModificationException, which hasn't been reported so far. Mostly I get IllegalStateExceptions when playing with SoakLRUMap and not synchronizing the Map, however I did get one NPE still: java.lang.NullPointerException at org.apache.commons.collections.map.LRUMap.moveToMRU(LRUMap.java:194) at org.apache.commons.collections.map.LRUMap.updateEntry(LRUMap.java:217) Line is: entry.before.after = entry.after; Which, looking at the code, implies that entry.before is null. Maybe another place to put a state check? Maybe a state check would be worth it there too? > NPE: map.LRUMap.reuseMapping(LRUMap.java:272) > --------------------------------------------- > > Key: COLLECTIONS-3 > URL: https://issues.apache.org/jira/browse/COLLECTIONS-3 > Project: Commons Collections > Issue Type: Bug > Components: Map > Affects Versions: 3.1 > Environment: Operating System: Linux > Platform: PC > Reporter: Otis Gospodnetic > Attachments: commons-collections-3.2-LRUMap-debug.jar, LRUMap.java, > SoakLRUMap.java > > > I'm using Collections 3.1 and just found this NPE in my logs: > java.lang.NullPointerException > at > org.apache.commons.collections.map.LRUMap.reuseMapping(LRUMap.java:272) > at > org.apache.commons.collections.map.LRUMap.addMapping(LRUMap.java:243) > at > org.apache.commons.collections.map.AbstractHashedMap.put(AbstractHashedMap.java:282) > I instantiated LRUMap like this: > LRUMap map = new LRUMap(31); > And from there on, I use it like I'd use any Map, putting things into > it, and so on. Maybe I'm not using LRUMap correctly? My _guess_ is > that this occurs when the Map is full, but I am not certain. > I am wrapping the LRUMap in my own Maps as follows, but I think they're > not the culprit: > LRUMap map = new LRUMap(31); > _userSessions = new ExpiringMap(map, > new TimerTTLReferenceHolder(1800000), // ttl=30min > 300000); // purge frequency=5min > The only similar thing I found is COM-1288, but it looks like that was fixed > before 3.1 release. > I understand the value of a self-contained unit test that demonstrates this > bug, > but it happens only occassionally on my production system, never during > development, so I can't really come up with it :( > My guess is that this is a boundary case, as line 272 is: > loop = loop.next; > So 'loop' is most likely null, and it's null because ... not sure, maybe that > hashIndex is wrong. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]