code: private void releaseCallbacks(Exception ex) {
          synchronized (callbacks) {
              for (Map.Entry<Integer, InvokeCallback> cb: callbacks.entrySet()) {
                  cb.getValue().release(ex);
              }
          }
      }
docs: Release waiting threads if we fail for some reason