int kr_coordi_handle_svroff(T_KREventLoop *el, int fd, T_KRMessage *krmsg) { KR_LOG(KR_LOGDEBUG, "Server [%s] Offline [%d]!", krmsg->serverid, fd); /* Check this server whether exists */ T_KRActualNode *node = \ kr_conhash_lookup(krcoordi.servers, krmsg->serverid); if (node == NULL) { KR_LOG(KR_LOGDEBUG, "Server %s not exists!", krmsg->serverid); return 0; } /* remove from fdtable */ kr_hashtable_remove(krcoordi.fdtable, &fd); /* remove from conhash */ T_KRCoordiConnector *ptServer = (T_KRCoordiConnector *)node->priv; kr_conhash_remove(krcoordi.servers, ptServer->id); /* Free this server */ kr_event_file_delete(el, fd, KR_EVENT_READABLE); close(fd); kr_free(ptServer); return 0; }
int kr_coordi_handle_clioff(T_KREventLoop *el, int fd, T_KRMessage *krmsg) { KR_LOG(KR_LOGDEBUG, "Client [%s] Offline [%d]!", krmsg->clientid, fd); /* Check this client whether exists */ T_KRListNode *node = kr_list_search(krcoordi.clients, krmsg->clientid); if (node == NULL) { KR_LOG(KR_LOGDEBUG, "Client %s not exists!", krmsg->clientid); return 0; } /*remove from list*/ T_KRCoordiConnector *ptClient = (T_KRCoordiConnector *)node->value; kr_list_remove(krcoordi.clients, ptClient->id); /* remove from fdtable */ kr_hashtable_remove(krcoordi.fdtable, &fd); /* Free this client */ kr_event_file_delete(el, fd, KR_EVENT_READABLE); close(fd); kr_free(ptClient); return 0; }
static void kr_rebuild_index_del(T_KRIndexTable *ptIndextable, T_KRRecord *ptRecord) { void *key = kr_field_get_value(ptRecord, ptIndextable->iIndexFieldId); T_KRHashTable *pHashTable = ptIndextable->ptIndex->pHashTable; T_KRIndexSolt *ptIndexSlot = kr_hashtable_lookup(pHashTable, key); if (ptIndexSlot != NULL) { /*modify statistical fields of external*/ if (kr_get_proctime(ptRecord) > ptIndexSlot->tExtMaxProcTime) { ptIndexSlot->tExtMaxProcTime = kr_get_proctime(ptRecord); } if (kr_get_transtime(ptRecord) > ptIndexSlot->tExtMaxTransTime) { ptIndexSlot->tExtMaxTransTime = kr_get_transtime(ptRecord); } /*remove record from list*/ kr_list_remove(ptIndexSlot->pRecList, ptRecord); /*free this slot if there is no records*/ if (kr_list_length(ptIndexSlot->pRecList) == 0 ) { kr_hashtable_remove(pHashTable, ptIndexSlot->pKeyValue); kr_list_destroy(ptIndexSlot->pRecList); kr_free(ptIndexSlot->pKeyValue); kr_free(ptIndexSlot); } } }
static void kr_rebuild_index_del(T_KRIndex *krindex, T_KRRecord *krrecord) { void *key = kr_get_field_value(krrecord, krindex->iIndexFieldId); T_KRList *pRecList = kr_hashtable_lookup(krindex->pHashTable, key); if (pRecList != NULL) kr_list_remove(pRecList, krrecord); if (kr_list_length(pRecList) != 0 ) { T_KRRecord *ptRecord = kr_list_value(kr_list_last(pRecList)); T_KRIndex *newIndex = krindex; /* the dropped record and the last record of current list * belongs to different tables */ if (krrecord->ptTable != ptRecord->ptTable) { newIndex = kr_get_table_index(ptRecord->ptTable, krindex->iIndexId); } key = kr_get_field_value(ptRecord, newIndex->iIndexFieldId); kr_hashtable_replace(newIndex->pHashTable, key, pRecList); } else { kr_list_destroy(pRecList); kr_hashtable_remove(krindex->pHashTable, key); } }
/* kr_hashset_remove an element * return 0 while success, -1 for else */ int kr_hashset_remove(T_KRHashSet *krset, const void *element) { kr_hashtable_remove(krset->set, element); return 0; }