[
https://issues.jboss.org/browse/ISPN-3868?page=com.atlassian.jira.plugin....
]
Sanne Grinovero commented on ISPN-3868:
---------------------------------------
+1 Alexander I agree with you about what would be a better implementation, still I
don't think the current API suggests in any way that it will use NIO.
NIO will come pretty soon in Infinispan but it's not being extensively used yet.
Deadlock in RemoteCache getAsync
--------------------------------
Key: ISPN-3868
URL:
https://issues.jboss.org/browse/ISPN-3868
Project: Infinispan
Issue Type: Bug
Components: Core
Affects Versions: 6.0.0.Final
Environment: RemoteCahe component of 6.0.0.Final
Reporter: Alexander Furer
Assignee: Mircea Markus
Labels: remote
Fix For: 7.0.0.Alpha1, 7.0.0.Final
Here is the implementation of remoteCahe.getAsync() :
{code}
public NotifyingFuture<V> getAsync(final K key) {
assertRemoteCacheManagerIsStarted();
final NotifyingFutureImpl<V> result = new NotifyingFutureImpl<V>();
Future<V> future = executorService.submit(new Callable<V>() {
@Override
public V call() throws Exception {
V toReturn = get(key);
result.notifyFutureCompletion();
return toReturn;
}
});
result.setExecuting(future);
return result;
}
{code}
2 problems here :
1. Callable's call method might be called BEFORE calling client had a chance to add
listener (i.e. getAsync is not returned yet), in this case its' listener futureDone
method will never be called.
2. Even case #1 has not happened and notifyFutureCompletion is called on listener, but
the future is not resolved yet : "call" has not returned, that's why the
future that is passed to listener is not resolved, and calling future.get from listener
blocks forever.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira