[ https://issues.apache.org/jira/browse/GEODE-6927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ernest Burghardt closed GEODE-6927. ----------------------------------- Assignee: Ernest Burghardt (was: Mario Kevo) > possible NPE in ConnectionTable.getThreadOwnedConnection if concurrent close > ---------------------------------------------------------------------------- > > Key: GEODE-6927 > URL: https://issues.apache.org/jira/browse/GEODE-6927 > Project: Geode > Issue Type: Bug > Components: messaging > Reporter: Darrel Schneider > Assignee: Ernest Burghardt > Priority: Minor > Labels: easy-fix, needs-review, pull-request-available > Fix For: 1.12.0 > > Time Spent: 2h > Remaining Estimate: 0h > > ConnectionTable.getThreadOwnedConnection has a couple of usages of > "this.threadConnectionMap" that could result in an NPE if the ConnectionTable > is concurrently closed. > The unsafe code: > {code:java} > if (this.threadConnectionMap == null) { > // This instance is being destroyed; fail the operation > closeCon( > "Connection table being destroyed", > result); > return null; > } > ArrayList al = (ArrayList) this.threadConnectionMap.get(id); > if (al == null) { > // First connection for this DistributedMember. Make sure list for this > // stub is created if it isn't already there. > al = new ArrayList(); > // Since it's a concurrent map, we just try to put it and then > // return whichever we got. > Object o = this.threadConnectionMap.putIfAbsent(id, al); > if (o != null) { > al = (ArrayList) o; > } > } > {code} > If a close happens after the initial null check but before either the get or > putIfAbsent call then a NPE will be thrown. > All the other code that uses "threadConnectionMap" is careful to save it into > a local var, and then use the local var. That is all that is needed here to > make this code thread safe. -- This message was sent by Atlassian Jira (v8.3.4#803005)