private void setStatus(int aStatus, TransactionException aTE) {
    // Make sure we only do this once
    //
    synchronized (this) {
      if (theStatus == DECEASED) return;

      theStatus = aStatus;
      theException = aTE;
    }

    if (shouldUpdate) theDynamicView.getSearchTask().taint();

    if (theTxn.isNull()) {
      try {
        TxnDispatcher.get().prepareAndCommit(theTxn);
      } catch (UnknownTransactionException aUTE) {
        /*
          Don't care much...if we got here, we're defining state
          and everyone else will fail at the status test above
        */
        synchronized (this) {
          theException = aUTE;
        }
      }
    }
  }
    public int offer(SearchOffer anOffer) {
      OpInfo myInfo = anOffer.getInfo();

      // Try the lock
      LockMgr myMgr = TxnLocks.getLockMgr(myInfo.getType());
      TxnLock myLock = myMgr.getLock(myInfo.getOID());

      int myResult;

      synchronized (myLock) {
        myResult = myLock.acquire(theTxn, TxnLock.READ, null, null, false);
      }

      if (myResult == TxnLock.SUCCESS) {
        if (keepLock) {
          /*
           Need to track the lock under the transaction
          */
          try {
            theTxn.add(new EntryTxnOp(TxnLock.READ, myInfo, myLock));
          } catch (TransactionException aTE) {
            myLock.release(theTxn, TxnLock.READ);
            theFailure = aTE;
            return STOP;
          }
        } else {
          /*
           No need to track this lock, we were just testing so
           we can release it now
          */
          myLock.release(theTxn, TxnLock.READ);
        }

        theEntry = anOffer.getEntry();
      }

      return STOP;
    }