Пример #1
0
Файл: vmap.c Проект: glguida/mh
void
vmap_info(vaddr_t va, vaddr_t * startp, size_t * sizep, uint8_t * typep)
{
	struct vme *vme = NULL;
	vaddr_t start;
	size_t size;
	uint8_t type;

	if (initialized) {
		vme = vmap_find(va);
	}
	if (vme == NULL) {
		start = 0;
		size = 0;
		type = VFNT_INVALID;
	} else {
		start = vme->addr;
		size = vme->size;
		type = vme->type;
	}
	if (startp)
		*startp = start;
	if (sizep)
		*sizep = size;
	if (typep)
		*typep = type;
}
Пример #2
0
bool valueMap::removeByID( MAPID i, bool bForce )
{
    VALUEMAPIT it = mmap_find(i);
    if (mit_valid(it))
    {
        VALUEMAP_VP p = mit_pv(it);
        p->bTempTrace = false;
        Assert(!(p->bTrace && p->hasFinalizeOp), "trace and finalize are both true!!!");

        if (bForce || (!p->bTrace && !p->hasFinalizeOp && p->refCount <= 0))
        {
            Assert(!valueMap::tracing);

			// 0)
			//lstFree.push_back(it->first);

			// 1)
			//if (!GCing)
			{
				VMAPIT vit = vmap_find(p->heapValue.get().asRawBits());
				//Assert(vit != VMap.end());
				Assert(vit_valid(vit));
				//VMap.erase(vit);
				vmap_erase(vit);
			}

            // 2)
            // mMap.erase(it);
			mmap_erase(it);

        }
        return true;
    }
    return false;
}
Пример #3
0
Файл: vmap.c Проект: glguida/mh
static void ___get_neighbors(vaddr_t addr, size_t size,
			     struct vme **pv, struct vme **nv)
{
	vaddr_t end = addr + size;
	struct vme *pvme = NULL, *nvme = NULL;

	if (addr == 0)
		goto _next;

	pvme = vmap_find(addr - 1);
	if (pvme != NULL && pvme->type == VFNT_FREE)
		*pv = pvme;

      _next:
	nvme = vmap_find(end);
	if (nvme != NULL && nvme->type == VFNT_FREE)
		*nv = nvme;
}
Пример #4
0
Файл: vmap.c Проект: glguida/mh
void vmap_free(vaddr_t va, size_t size)
{
	struct vme *vme;

	if (!initialized) {
		vmap_init();
		initialized++;
	}
	size = round_page(size);
	vme = vmap_find(va);
	assert(vme != NULL);
	assert(vme->addr == va);
	assert(vme->size == size);
	assert(vme->type != VFNT_FREE);
	vmap_remove(vme);
	vmapzone_free(&vmap_zone, va, size);
}
Пример #5
0
MAPID valueMap::containsValue(JS::Value v)
{
//     VALUEMAPIT it = mMap.begin();
//     for (; it != mMap.end(); it++)
//     {
//         if (v == it->second.heapValue.get())
//             return it->first;
//     
// 	}

	VMAPIT vit = vmap_find(v.asRawBits());
	if (vit_valid(vit))
	{
		VALUEMAPIT it = mmap_find(vit_v(vit));
		Assert(mit_valid(it) && mit_v(it).heapValue.get().asRawBits() == v.asRawBits());
		return mit_k(it);
	}


    return 0;
}