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

Deadlock in RemoteCache getAsync

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

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)
              Archiver:
              rhn-support-adongare Amol Dongare

                Created:
                Updated:
                Resolved:
                Archived: