Example #1
0
void debugFree(void *memoryParameter, int tag)
{
	unsigned char *memory;
	struct chunkHeader *chunkHeader;
	struct chunkTrailer *chunkTrailer;
	struct chunkHeader *walker;
	struct chunkHeader *previous;

	memory = memoryParameter;
	chunkHeader = (struct chunkHeader *)(memory - sizeof(struct chunkHeader));

	if (chunkHeader->magicNumber != MAGIC_NUMBER)
	{
		fprintf(stderr, "debugFree - invalid magic number in header: %08x, malloc tag = %d, free tag = %d\n", chunkHeader->magicNumber, chunkHeader->tag, tag);
		exit(1);
	}

	previous = NULL;

	for (walker = chunkList; walker != NULL; walker = walker->next)
	{
		if (walker == chunkHeader)
			break;

		previous = walker;
	}

	if (walker == NULL)
	{
		fprintf(stderr, "Double free detected, malloc tag = %d, free tag = %d\n", chunkHeader->tag, tag);
		exit(1);
	}

	if (previous == NULL)
		chunkList = walker->next;

	else
		previous->next = walker->next;

	chunkTrailer = (struct chunkTrailer *)(memory + chunkHeader->length);

	if (chunkTrailer->magicNumber != MAGIC_NUMBER)
	{
		fprintf(stderr, "debugFree - invalid magic number in trailer: %08x, malloc tag = %d, free tag = %d\n", chunkTrailer->magicNumber, chunkHeader->tag, tag);
		exit(1);
	}

#if defined MEMORY_USAGE

	removeMemory( chunkHeader->tag, tag );

#endif

	free(chunkHeader);

}
bool JdbcUtil::memoryInit(void)
{
	setError(NULL);
	if (!removeMemory()) return false;
	if (!removeSemaphores()) return false;
	if (!getMemory(true)) return false;
	if (!attachMemory()) return false;
	memset(sharedMemory,0,SHARED_MEMORY_SIZE);
	sharedMemory->active = true;

	if (!getSemaphores(true)) return false;
	if (semctl(semaphoreId, 0, SETVAL, 1) == -1)
	{
		int err = errno;
		removeMemory();
		removeSemaphores();
		setPerror(err,"Cannot initialize semaphore value");
		return false;
	}
	return true;
}
Example #3
0
void _debugFree(void *memoryParameter, int tag)
{
	
	unsigned char *memory;
	struct chunkHeader *chunkHeader;
	struct chunkTrailer *chunkTrailer;
	struct chunkHeader *walker;
	struct chunkHeader *previous;

	memory = memoryParameter;
	chunkHeader = (struct chunkHeader *)(memory - sizeof(struct chunkHeader));

	if (chunkHeader->magicNumber != MAGIC_NUMBER)
	{
		dbgf( DBGL_SYS, DBGT_ERR, 
		     "invalid magic number in header: %08x, malloc tag = %d, free tag = %d", 
		     chunkHeader->magicNumber, chunkHeader->tag, tag );
		cleanup_all( -500080 );
	}

	previous = NULL;

	for (walker = chunkList; walker != NULL; walker = walker->next)
	{
		if (walker == chunkHeader)
			break;

		previous = walker;
	}

	if (walker == NULL)
	{
		dbg( DBGL_SYS, DBGT_ERR, "Double free detected, malloc tag = %d, free tag = %d", 
		     chunkHeader->tag, tag );
		cleanup_all( -500081 );
	}

	if (previous == NULL)
		chunkList = walker->next;

	else
		previous->next = walker->next;


	chunkTrailer = (struct chunkTrailer *)(memory + chunkHeader->length);

	if (chunkTrailer->magicNumber != MAGIC_NUMBER)
	{
		dbgf( DBGL_SYS, DBGT_ERR, 
		     "invalid magic number in trailer: %08x, malloc tag = %d, free tag = %d",
		     chunkTrailer->magicNumber, chunkHeader->tag, tag );
		cleanup_all( -500082 );
	}

#ifdef MEMORY_USAGE

	removeMemory( chunkHeader->tag, tag );

#endif

	free(chunkHeader);
	

}
/* Clear all the entries */
void MainTransitionFunction::clearTable(void)
{
	removeMemory();
	mTable.clear();
}
MainTransitionFunction::~MainTransitionFunction()
{
	removeMemory();
}