Exemplo n.º 1
0
//
// trace protects objects from being collected
//
//
void valueMap::trace(JSTracer *trc)
{
    Assert(!valueMap::tracing);
    valueMap::tracing = true;

	//VMap.clear();

	//VMAPIT vit;
	//uint64_t Old, New;

    //char sz[16] = {'v','m',0};


	/*VALUEMAPIT it = mMap.begin();
    for (; it != mMap.end(); it++)*/

    VALUEMAPIT it;
	mmap_loop(it)
    {
        //itoa(it->first, &sz[2], 10);
		//stHeapValue* p = it->second;
        //stHeapValue* p = &it->second;
		VALUEMAP_VP p = mit_pv(it);
        
        if (p->bTrace || p->bTempTrace || p->refCount > 0)
        {
			//Old = p->heapValue.get().asRawBits();
			//
			// Set name to 0 is OK? it seems OK. I'm not sure.
			// 
            // NOTICE: It seems 'name' here will cause memory leak if it's not 0
            // 
            //
            JS_CallHeapValueTracer(trc, &p->heapValue, 0 /* name */);
			//New = p->heapValue.get().asRawBits();
			//if (New != Old)
			//{
			//	New = Old;
			//	//
			//	// Will it get here?
			//	// Not sure
			//	//
			//	vit = VMap.find(Old);
			//	Assert(vit != VMap.end());
			//	VMap.erase(vit);
			//	VMap.insert(VMAP::value_type(New, it->first));
			//}
        }
    }

// 	for (it = mMap.begin(); it != mMap.end(); it++)
// 	{
// 		VMap.insert(VMAP::value_type(it->second.heapValue.get().asRawBits(), it->first));
// 	}

    valueMap::tracing = false;
}
Exemplo n.º 2
0
void CNetClient::TraceMember(JSTracer *trc)
{
	std::deque<JS::Heap<JS::Value> >::iterator itr;
	for (itr=m_GuiMessageQueue.begin(); itr != m_GuiMessageQueue.end(); ++itr)
		JS_CallHeapValueTracer(trc, &*itr, "m_GuiMessageQueue");
}