If you look closely, you'll see that cellEditor was set to null only two lines before this. cellEditor.pendingDispose therefore throws an exception.

Setting cellEditor to null makes isEditing() evaluate to false, so multiple calls to cancelEditing will not cause it to be disposed multiple times.