Skip to content

Commit

Permalink
Added missing locks to DisposeScript and getScripts
Browse files Browse the repository at this point in the history
git-svn-id: https://subversion.assembla.com/svn/d2bs@1832 080cfd25-d5d9-4c59-82ea-70d02a200d8b
  • Loading branch information
kolton committed May 10, 2014
1 parent bcee8d3 commit 22ea7dd
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 21 deletions.
2 changes: 1 addition & 1 deletion branches/bob-18/D2BS.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

#define XP_WIN

#define D2BS_VERSION "1.5.1825" //uptodate with d branch 1765 ff 20b
#define D2BS_VERSION "1.5.1832" //uptodate with d branch 1765 ff 20b

#include <windows.h>
#include <vector>
Expand Down
48 changes: 28 additions & 20 deletions branches/bob-18/JSScript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,19 +55,23 @@ JSAPI_FUNC(script_getNext)
Script* iterp = (Script*)JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx, vp), &script_class, NULL);
ScriptEngine::LockScriptList("scrip.getNext");
//EnterCriticalSection(&ScriptEngine::lock);
for(ScriptMap::iterator it = ScriptEngine::scripts.begin(); it != ScriptEngine::scripts.end(); it++)
if(it->second == iterp )
{
it++;
if(it ==ScriptEngine::scripts.end() )
break;
iterp= it->second;
JS_SetPrivate(cx, JS_THIS_OBJECT(cx, vp), iterp);
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
ScriptEngine::UnLockScriptList("scrip.getNext");
//LeaveCriticalSection(&ScriptEngine::lock);
return JS_TRUE;
}

for(ScriptMap::iterator it = ScriptEngine::scripts.begin(); it != ScriptEngine::scripts.end(); it++)
{
if(it->second == iterp )
{
it++;
if(it ==ScriptEngine::scripts.end() )
break;
iterp= it->second;
JS_SetPrivate(cx, JS_THIS_OBJECT(cx, vp), iterp);
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
ScriptEngine::UnLockScriptList("scrip.getNext");
//LeaveCriticalSection(&ScriptEngine::lock);
return JS_TRUE;
}
}

//LeaveCriticalSection(&ScriptEngine::lock);
ScriptEngine::UnLockScriptList("scrip.getNext");

Expand Down Expand Up @@ -206,13 +210,17 @@ JSAPI_FUNC(my_getScripts)
JSObject* pReturnArray = JS_NewArrayObject(cx, 0, NULL);
JS_BeginRequest(cx);
JS_AddRoot(cx, &pReturnArray);
for(ScriptMap::iterator it = ScriptEngine::scripts.begin(); it != ScriptEngine::scripts.end(); it++)
{
JSObject* res = BuildObject(cx, &script_class, script_methods, script_props, it->second);
jsval a = OBJECT_TO_JSVAL(res);
JS_SetElement(cx, pReturnArray, dwArrayCount, &a);
dwArrayCount++;
}
ScriptEngine::LockScriptList("getScripts");

for(ScriptMap::iterator it = ScriptEngine::scripts.begin(); it != ScriptEngine::scripts.end(); it++)
{
JSObject* res = BuildObject(cx, &script_class, script_methods, script_props, it->second);
jsval a = OBJECT_TO_JSVAL(res);
JS_SetElement(cx, pReturnArray, dwArrayCount, &a);
dwArrayCount++;
}

ScriptEngine::UnLockScriptList("getScripts");
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(pReturnArray));
JS_RemoveRoot(cx, &pReturnArray);
JS_EndRequest(cx);
Expand Down
5 changes: 5 additions & 0 deletions branches/bob-18/ScriptEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,13 @@ void ScriptEngine::RunCommand(const char* command)

void ScriptEngine::DisposeScript(Script* script)
{
LockScriptList("DisposeScript");

if(scripts.count(script->GetFilename()))
scripts.erase(script->GetFilename());

UnLockScriptList("DisposeScript");

if(GetCurrentThreadId() == script->threadId)
delete script;
else
Expand Down

0 comments on commit 22ea7dd

Please sign in to comment.