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); } }
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); }
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; }});
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; }