Wednesday, March 30, 2011

Check what ScosRead() does

  • In chtbl.c, add:
int
JG_DEBUG_chtbl_remove(ObjectStoreHeader_t * pObjectStoreHeader,
StateItem_t * pDataItemToRemove)
{
int bucket;
S32 elementIndexRemoved;
List_t *pList;
ListElmt_t *prev;
ListElmt_t *pElement;
ListElmt_t *pElementItemRemoved;
HashIndex_t *pHashIndex = get_hash_index_ptr(pObjectStoreHeader);
HashTableHeader_t *pHashTableHeader = get_hash_table_header_ptr(pObjectStoreHeader);

/* Hash the key */
bucket = wrapperHashFn(pObjectStoreHeader->protocol, &pDataItemToRemove->key, pHashIndex->hdr.numberOfItems) % pHashIndex->hdr.numberOfItems;
if (TRUE == DebugIndicator)
{
printf("chtbl_remove: bucket=%d\n", bucket);
}

/* point to the first list */
pList = pHashIndex->bucket;

/* move to the hashed list */
pList += bucket; /* ptr arith */

/* Search for the data in the bucket */
prev = NULL;

JG_DEBUG("chtbl_remove: pDataItemToRemove->key.ukey.tcapKey{.dialog_id=%d, .type=%d}", pDataItemToRemove->key.ukey.tcapKey.dialog_id, pDataItemToRemove->key.ukey.tcapKey.type);
for (pElement = get_ptr_from_element_index(pObjectStoreHeader, LIST_HEAD(pList)); NULL != pElement; pElement = get_next_hash_table_item(pElement))
{
JG_DEBUG("chtbl_remove: pElement->data.item.key.ukey.tcapKey.{.dialog_id=%d, .type=%d}", pElement->data.item.key.ukey.tcapKey.dialog_id, pElement->data.item.key.ukey.tcapKey.type);
if (matchFn(&(pDataItemToRemove->key), &(pElement->data.item.key)))
{
if (TRUE == DebugIndicator)
{
printf("chtbl_remove: found\n");
}

*pDataItemToRemove = pElement->data.item; /* structure copy */
if (TRUE == DebugIndicator)
{
printf("item=%d\n", pElement->thisIndex);
dump_scos_state_item(pObjectStoreHeader->protocol, pDataItemToRemove);
}

/* Remove the item from the bucket */
if (list_rem_next(pObjectStoreHeader, pList, prev, &elementIndexRemoved, &pElementItemRemoved) 0)
{
pHashTableHeader->itemsUsed--;
list_ins_next(pObjectStoreHeader, &pHashTableHeader->freeList, NULL, elementIndexRemoved, pElementItemRemoved);
return RETURNok;
}

else
{
if (TRUE DebugIndicator)
{
printf(“chtbl_remove: list_rem_next failure\n”);
}
return RETURNerror;
}
}
prev = pElement;
}

/ Return that the data was not found /
if (TRUE == DebugIndicator)
{
printf(“chtbl_remove: not found\n”);
}
return RETURNerror;
}


  1. In scoschtbl.h, add:
int
JG_DEBUG_chtbl_remove(ObjectStoreHeader_t * pObjectStoreHeader, StateItem_t *pDataItemToRemove);


  1. In scoslib.c / Scos Read, replace
iRet = _primary_object_store_delete_object(pObjectStoreDescriptor, pStateItem);

with

iRet = JG_DEBUG_chtbl_remove(pObjectStoreDescriptor->pObjectStoreHeader, pStateItem);
JG_DEBUG("ScosRead: _primary_object_store_delete_object returned %d", iRet);

Also add the name of the Object Store we’re reading from:

JG_DEBUG("ScosRead: pObjectStoreDescriptor->name=%s",pObjectStoreDescriptor->name);