Changeset 35442 in webkit for trunk/JavaScriptCore/API/JSContextRef.cpp
- Timestamp:
- Jul 29, 2008, 11:05:11 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/API/JSContextRef.cpp
r35293 r35442 38 38 using namespace KJS; 39 39 40 JSContextGroupRef JSContextGroupCreate() 41 { 42 return toRef(JSGlobalData::create().releaseRef()); 43 } 44 45 JSContextGroupRef JSContextGroupRetain(JSContextGroupRef group) 46 { 47 toJS(group)->ref(); 48 return group; 49 } 50 51 void JSContextGroupRelease(JSContextGroupRef group) 52 { 53 toJS(group)->deref(); 54 } 55 40 56 JSGlobalContextRef JSGlobalContextCreate(JSClassRef globalObjectClass) 57 { 58 return JSGlobalContextCreateInGroup(toRef(JSGlobalData::create().get()), globalObjectClass); 59 } 60 61 JSGlobalContextRef JSGlobalContextCreateInGroup(JSContextGroupRef group, JSClassRef globalObjectClass) 41 62 { 42 63 initializeThreading(); … … 44 65 JSLock lock(true); 45 66 46 JSGlobalData* sharedGlobalData = &JSGlobalData::sharedInstance();67 JSGlobalData* globalData = toJS(group); 47 68 48 69 if (!globalObjectClass) { 49 JSGlobalObject* globalObject = new ( sharedGlobalData) JSGlobalObject;70 JSGlobalObject* globalObject = new (globalData) JSGlobalObject; 50 71 return JSGlobalContextRetain(toGlobalRef(globalObject->globalExec())); 51 72 } 52 73 53 JSGlobalObject* globalObject = new ( sharedGlobalData) JSCallbackObject<JSGlobalObject>(globalObjectClass);74 JSGlobalObject* globalObject = new (globalData) JSCallbackObject<JSGlobalObject>(globalObjectClass); 54 75 ExecState* exec = globalObject->globalExec(); 55 76 JSValue* prototype = globalObjectClass->prototype(exec); … … 76 97 77 98 gcUnprotect(exec->dynamicGlobalObject()); 99 100 JSGlobalData& globalData = exec->globalData(); 101 if (globalData.refCount() == 1) { 102 // The last reference was released, this is our last chance to collect. 103 Heap* heap = globalData.heap; 104 105 ASSERT(!heap->protectedObjectCount()); 106 ASSERT(!heap->isBusy()); 107 108 // Heap::destroy() will delete JSGlobalObject, which will in turn delete JSGlobalData, which will 109 // delete the heap, which would cause a crash if allowed. 110 globalData.heap = 0; 111 112 delete heap; 113 } 78 114 } 79 115 … … 86 122 return toRef(exec->dynamicGlobalObject()->toThisObject(exec)); 87 123 } 124 125 JSContextGroupRef JSContextGetGroup(JSContextRef ctx) 126 { 127 ExecState* exec = toJS(ctx); 128 return toRef(&exec->globalData()); 129 }
Note:
See TracChangeset
for help on using the changeset viewer.