Example #1
0
void processHandledMessage(DISPATCH_PTR dispatch)
{
  dispatchUpdateAndDisplay(HandledDispatch, dispatch);
  resourceRemoveAttending(dispatch);
  
  tapAfterHandled(dispatch);
  if (dispatch->msg && !ONE_WAY_MSG(dispatch->msg)) {
    switch (dispatch->msg_class) {
    case SuccessClass: 
#ifndef NMP_IPC
      tapWhenSuccess(dispatch); 
      tapAfterSuccess(dispatch); 
#endif
      break;
#ifndef NMP_IPC
    case FailureClass: 
      tapWhenFailure(dispatch);
      tapAfterFailure(dispatch);
      break;
#endif
    default:
      /* X_IPC_MOD_ERROR("Unhandled default"); */
      X_IPC_MOD_WARNING1("unhandled default in  processHandledMessage %d\n",
		    dispatch->msg_class);
      break;
    }
  }
  
  resourceProcessPending(dispatch);
#ifndef NMP_IPC
  CompletionConstraints(dispatch);
  HandleKillAfterAttendingNodes(dispatch);
#endif
  if (!dispatch->msg || ONE_WAY_MSG(dispatch->msg))
    dispatchFree(dispatch);
  
  /* 14-May-91: fedor: exception class messages that are byPassed or retry
     should not be dispatch freed arbitrarly - may need to declare the first
     message handled and then resend the same dispatch through recvMessage */
}
Example #2
0
void dispatchUpdateAndDisplay(DISPATCH_STATUS_TYPE newStatus,
			      DISPATCH_PTR dispatch)
{
  const char *Data;
  CONST_FORMAT_PTR Format;
  BOOLEAN ignored;
  BOOLEAN freeStruct = FALSE, keepStruct = FALSE;
  
  if (x_ipc_LogMessagesP()) {
    ignored = x_ipc_LogIgnoreP() && Ignore_Logging_Message(dispatch->msg);
    if (!ignored || !LogIgnoreAllP()) {
      if (ignored) Start_Ignore_Logging();
    
      dispatchUpdateAndDisplay1(newStatus, dispatch);
    
      if ((newStatus == AttendingDispatch || dispatch->msg_class == ReplyClass)
	  && x_ipc_LogDataP()) {
      
	if (dispatch->msg) {
	  Data = NULL;
	  if (newStatus == HandledDispatch) {
	    MSG_PTR replyMsg;
#ifdef NMP_IPC
	    if (ONE_WAY_MSG(dispatch->msg) && dispatch->resData->classData) {
	      replyMsg = getResponseMsg(dispatch->resData);
	      Format = replyMsg->msgData->msgFormat;
	    } else
#endif
	      {
		replyMsg = dispatch->msg;
		Format = dispatch->msg->msgData->resFormat;
	      }
	    parseMsgFormats(replyMsg); /* In case not yet parsed */
	    if (Format != NULL) {
	      if ( (dispatch->resData) && (dispatch->resData->dataStruct)) {
		/* This is a central message, since the data is already here.  */
		freeStruct = FALSE;
		keepStruct = TRUE;
		Data = dispatch->resData->dataStruct;
	      } else {
		Data = dispatchDecodeData(Format, dispatch->resData, 
					  &freeStruct);
	      }
#ifdef NMP_IPC
	      if (Data && ONE_WAY_MSG(replyMsg) &&
		  replyMsg->msgData->resFormat) {
		log_IPC_Data(replyMsg, Data, dispatch->resData, freeStruct);
	      } else
#endif
		{ 
		  Log_Data(Format, Data, 4);
		  if (Data && freeStruct && 
		      (Data != dispatch->resData->msgData)) {
		    /* free decoded data, including all its subelements */
		    x_ipc_freeDataStructure(Format, (void *)Data);
		    Data = NULL;
		  } else if ((dispatch->resData) && !keepStruct) {
		    dispatch->resData->dataStruct = NULL;
		  }
		}
	    }
	  } else {
	    Format = dispatch->msg->msgData->msgFormat;
	    if (Format != NULL) {
	      Data = dispatchDecodeData(Format, dispatch->msgData, &freeStruct);
#ifdef NMP_IPC
	      if (Data && ONE_WAY_MSG(dispatch->msg) &&
		  dispatch->msg->msgData->resFormat) {
		log_IPC_Data(dispatch->msg, Data, dispatch->msgData, freeStruct);
	      } else
#endif
		{ 
		  Log_Data(Format, Data, 4);
		  if (Data && freeStruct && (Data != dispatch->msgData->msgData)){
		    /* free decoded data, including all its subelements */
		    x_ipc_freeDataStructure(Format, (void *)Data);
		  } else if (dispatch->msgData) {
		    dispatch->msgData->dataStruct = NULL;
		  }
		  Data = NULL;
		}
	    }
	  }
	}
      }
      if (ignored) End_Ignore_Logging();
    }
  }
  DISPATCH_SET_STATUS(newStatus, dispatch);
}