Пример #1
0
void deliverResponse(DISPATCH_PTR dispatch)
{
  if (dispatch->respProc) {
    (*dispatch->respProc)(dispatch, dispatch->respData);
    return;
  }
  
  if (!resourceSelfQuery(dispatch))
    pendingReplyRemove(dispatch);
  
  if (dispatch->org->alive) {
    dispatch->resData->intent = QUERY_REPLY_INTENT;
    dispatch->resData->msgRef = dispatch->refId;
    
    (void)x_ipc_dataMsgSend(dispatch->org->writeSd, DISPATCH_RES_DATA(dispatch));
  } else if (!dispatch->org->repliesPending) {
    moduleFree(dispatch->org);
  }
}
Пример #2
0
/*
   The straightforward way to do this would be using "centralReply", 
   but that calls "recvMessage" recursively, which breaks things.
   */
static void sendMultiQueryTermination (DISPATCH_PTR dispatch)
{
  static DATA_MSG_PTR nullReplyData = NULL;
  
  if (!nullReplyData) {
    nullReplyData = x_ipc_dataMsgCreate(0, QUERY_REPLY_INTENT, 0, 0, 0, 
				  (FORMAT_PTR)NULL,
				  (char *)NULL, 
				  (FORMAT_PTR)NULL, (char *)NULL);
  }
  
  nullReplyData->msgRef = dispatch->refId;
  
  if (!dispatch->org)
    X_IPC_ERROR("Error: sendMultiQueryTermination: No query origin.");
  else {
    if (dispatch->org->alive) {
      (void)x_ipc_dataMsgSend(dispatch->org->writeSd, nullReplyData);
    } else if (!dispatch->org->repliesPending) {
      moduleFree(dispatch->org);
    }
  }
}