I don't know if this is a issue or the programmer is responsible to do this but, worth to try!

In my Grid, I set loadingMask(true), so, before the data is loaded, the grid is masked, and when data arrives, the grid is unmasked, so far, so good.

But if an exception occurs in the Loader(I'm using a BasePagingLoader and a RPCProxy), the grid doesn't get unmasked.

As it is only notified by beforeDataChanged and DataChanged, not LoadException.

Code:
      @Override
      public void storeBeforeDataChanged(StoreEvent<ModelData> se) {
        onBeforeDataChanged(se);
      }
...
      @Override
      public void storeDataChanged(StoreEvent<ModelData> se) {
        onDataChanged(se);
      }
In my case I added an listener to the Loader and in case of an Exception, I unmask the Grid.

I'm also using PagingToolBar, and in the toolbar code i found:

Code:
          public void loaderBeforeLoad(LoadEvent le) {
            savedEnableState = isEnabled();
            setEnabled(false);
            refresh.setIcon(IconHelper.createStyle("x-tbar-loading"));
          }

          public void loaderLoad(LoadEvent le) {
            refresh.setIcon(getImages().getRefresh());
            setEnabled(savedEnableState);
            onLoad(le);
          }

          public void loaderLoadException(LoadEvent le) {
            refresh.setIcon(getImages().getRefresh());
            setEnabled(savedEnableState);
          }
So the toolbar get unmasked but the Grid don't.

But shouldn't this be the default behavior?

A test case is in the Explorer itself, http://www.extjs.com/examples/explorer.html#paging, just open it and turn off your internet connection and try refresh. The Grid will be stuck at "Loading" message.

Sorry if my mistake.

Regards,