docs: public synchronized void preDelete(Transaction transaction)
                      throws ObjectManagerException
      {
          final String methodName = "preDelete";
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this, cclass, methodName, new Object[] { transaction });
  
          // TODO Remove this fix, we should not need it now we do not split checkpoint sets.
          // Defect 326031
          // We only need to do this check once so at recovery time we
          // can rely on it having been done when the transaction first 
          // ran.
          // TODO: Can we avoid this check by grouping transaction work into a single checkpoint?
          // TODO: Re tested this on 18/6/07 and the failure still occurs even though we now write
          // TODO: complete transactions in a checkpoint. Here is a scenarion that might cause this,
          // TODO: however the actual test ( performance) does the delete for the entry and list as two
          //       separate serial tracactions!
          // 
          //   Application Thread          Checkpoint Helper      LogRecords   
          //  
          //   Delete Entry                                       Delete Entry 
          //   Delete List                                        Delete List
          //                               SetRequiresCheckpoint
          // 
          //                               Checkpoint Start       Checkpoint Start. 
          //                                                      Checkpoint Entry(Deleted)
          //                                                      Checkpoint List(Deleted)
          //
          //   Commit                                             Commit
          //   Delete Entry/List from Store
          //                               Flush ObjectStore             
          //                               Checkpoint End         Checkpoint End.  
          // 
          //   
          //   Crash 
          // 
          //   Recover List in Deleted state, 
          //   Entry not yet recovered in deleted state.
  
          if (transaction.getObjectManagerStateState() != ObjectManagerState.stateReplayingLog) {
              // The list must be empty, apart from links this transaction will delete.
              Token nextToken = head;
              while (nextToken != null) {
                  Link nextLink = (Link) nextToken.getManagedObject();
                  if (nextLink.willBeDeleted(transaction))
                      nextToken = nextLink.next;
                  else {
                      if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
                          trace.exit(this, cclass,
                                     methodName,
                                     "via CollentionNotEmptyException"
                                                     + "size=" + size + "(long)"
                                                     + " nextLink.state=" + nextLink.state + "(int) " + Link.stateNames[nextLink.state]
                                                     + "\n nextLink.getTransactionLock()=" + nextLink.getTransactionLock() + "(transactionLock)"
                                          );
  
                      throw new CollectionNotEmptyException(this, size, transaction);
                      //System.out.println("LinkedList.preDelete nextLink.state ="+nextLink.state+" "+Link.stateNames[nextLink.state]
                      //                  +"\n nextLink.getTransactionLock()="+nextLink.getTransactionLock() 
                      //                  );
                      //break;
                  } // if (  nextLink.state == Link.stateToBeDeleted...
              } // while (nextToken != null).
          } // if not recovering...
  
          super.preDelete(transaction); // Also takes a lock.
          // Visibility is now restricted to our transaction only.
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this, cclass, methodName);
      }