SNMP4J version 2.5.6
SNMP4J-Agent version 2.6.0

I have discovered the following behavior inconsistency where I would expect no 
error to be returned in both cases.

When a PDU is sent containing one SET of a row status to 6 for destroy for a 
row that exists the row is destroyed and no error is returned.  Performing the 
same operation in a separate PDU for a row that does not exist again returns no 
error.  When a PDU containing 2 SETs, one for a row that exists and one for a 
row that does not exist (both in the same table) a commit failed error is 
returned and the row that existed is destroyed.

In the line highlighted below of DefaultMOTable the variable "row" has a null 
value when this event occurs and causes a null pointer exception.

  public void commit(SubRequest request) {
    OID cellOID = request.getVariableBinding().getOid();
    MOTableCellInfo cell = getCellInfo(cellOID);
    MOMutableColumn col = (MOMutableColumn) getColumn(cell.getColumn());
    if (logger.isDebugEnabled()) {
      logger.debug("Committing sub-request ("+
                   request.getVariableBinding()+") for column: "+col);
    }
    // Make sure changes are atomic -> sync whole table model
    synchronized (model) {
      R row;
      if (hasNewRows(request.getRequest())) {
        row = getNewRows(request.getRequest()).get(cell.getIndex());
        // check if row has been added already
        if (!model.containsRow(row.getIndex())) {
          if (!addRow(row)) {
            request.setErrorStatus(PDU.resourceUnavailable);
            return;
          }
        }
      }
      else {
        row = model.getRow(cell.getIndex());
      }

-DonB
_______________________________________________
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j

Reply via email to