Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-3868

Deadlock in RemoteCache getAsync

XMLWordPrintable

      Here is the implementation of remoteCahe.getAsync() :

       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;
         }
      

      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.

              mircea.markus Mircea Markus (Inactive)
              furic Alexander Furer (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: