Esempio n. 1
0
void x_ipc_hndDelete(HND_PTR hnd)
{
  HND_KEY_TYPE hndKey;
  LIST_PTR msgList;
  LIST_ELEM_PTR listTmp;
  MODULE_PTR module;
  MSG_PTR msg;
  
  if (hnd) {
    if (hnd->hndLanguage == UNKNOWN_LANGUAGE) return;
    
    hnd->hndLanguage = UNKNOWN_LANGUAGE;
    
    hnd->msg = NULL;
    msgList = hnd->msgList;
    hnd->msgList = NULL; /* to revent recursion of free's */
    x_ipc_listTestDeleteItemAll((LIST_ITER_FN) x_ipc_removeHndFromMsg, 
			  (char *)hnd, msgList);
    
    x_ipc_listFree(&msgList);
    
    LOCK_CM_MUTEX;
    (void)x_ipc_idTableRemove(hnd->localId, GET_C_GLOBAL(hndIdTable));
    /* Need to remove from the module list.   */
    if (GET_M_GLOBAL(moduleList) != NULL) {
      for (listTmp = GET_M_GLOBAL(moduleList)->first; 
	   (listTmp != NULL);
	   listTmp = listTmp->next
	   ) {
	module = (MODULE_PTR)(listTmp->item);
	x_ipc_listDeleteItemAll(hnd,module->hndList);
      }
    }
    if (hnd->hndData) {
      hndKey.num = hnd->sd;
      hndKey.str = hnd->hndData->hndName;
      x_ipc_hashTableRemove((char *)&hndKey, GET_C_GLOBAL(handlerTable));
      msg = GET_MESSAGE(hnd->hndData->msgName);
      if (msg) x_ipc_removeHndFromMsg(hnd, msg);
      x_ipcFree((char *)hnd->hndData->msgName);
      hnd->hndData->msgName = NULL;
      x_ipcFree((char *)hnd->hndData->hndName);
      hnd->hndData->hndName = NULL;
      x_ipcFree((char *)hnd->hndData);
      hnd->hndData = NULL;
    }
    UNLOCK_CM_MUTEX;
    hnd->hndData = NULL;
    
    x_ipcFree((char *)hnd);
  }
}
Esempio n. 2
0
void msgInfoMsgSend(int sd)
{
  int32 refId;
  MSG_PTR msg;
  
  msg = GET_MESSAGE(X_IPC_MSG_INFO_QUERY);
  
  refId = msg->msgData->refId;
  
  INT_TO_NET_INT(refId);
  (void)x_ipc_writeNBytes(sd, (char *)&refId, sizeof(int32));
  
  formatterSend(sd, msg->msgData->msgFormat);
  formatterSend(sd, msg->msgData->resFormat);
}
Esempio n. 3
0
static void x_ipc_tappedMsgVarHnd(X_IPC_REF_PTR Ref, STR_LIST_PTR tapped)
{
#ifdef UNUSED_PRAGMA
#pragma unused(Ref)
#endif
  MSG_PTR msg;

  LOCK_CM_MUTEX;
  x_ipc_strListFree(&GET_C_GLOBAL(tappedMsgs),TRUE);
  
  GET_C_GLOBAL(tappedMsgs) = tapped;
  STR_LIST_ITERATE(tapped, string, 
                   { LOCK_CM_MUTEX; msg = GET_MESSAGE(string); UNLOCK_CM_MUTEX;
		     if (msg != NULL) {
		       msg->direct = FALSE;
		     }});
Esempio n. 4
0
MSG_PTR x_ipc_findOrRegisterMessage(const char *name)
{
  MSG_PTR msg;
  MSG_DATA_PTR msgData;
  
  LOCK_CM_MUTEX;
  msg = GET_MESSAGE(name);
  UNLOCK_CM_MUTEX;
  if (!msg) {
    msgData = NEW(MSG_DATA_TYPE);
    msgData->refId = 0;
    msgData->name = strdup(name);
    msgData->msgFormat = NULL;
    msgData->resFormat = NULL;
    msgData->msg_class = HandlerRegClass;
    
    msg = x_ipc_msgCreate(msgData);
  }
  return msg;
}