forked from 0ad/0ad
Initialize CNetServerSession and CNetClient::CServerSession at server and client startup rather than when they are first created, to prevent crashes in SpiderMonkey due to intializing during an event handler or in a different thread.
This was SVN commit r5854.
This commit is contained in:
parent
3b72e4f92c
commit
bdc7f3af7c
@ -21,7 +21,6 @@ CNetClient::CServerSession::CServerSession(int sessionID, const CStrW& name):
|
|||||||
m_SessionID(sessionID),
|
m_SessionID(sessionID),
|
||||||
m_Name(name)
|
m_Name(name)
|
||||||
{
|
{
|
||||||
ONCE( ScriptingInit(); );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetClient::CServerSession::ScriptingInit()
|
void CNetClient::CServerSession::ScriptingInit()
|
||||||
@ -76,6 +75,9 @@ void CNetClient::ScriptingInit()
|
|||||||
AddProperty(L"sessions", &CNetClient::m_JSI_ServerSessions);
|
AddProperty(L"sessions", &CNetClient::m_JSI_ServerSessions);
|
||||||
CJSMap<SessionMap>::ScriptingInit("NetClient_SessionMap");
|
CJSMap<SessionMap>::ScriptingInit("NetClient_SessionMap");
|
||||||
CJSObject<CNetClient>::ScriptingInit("NetClient");
|
CJSObject<CNetClient>::ScriptingInit("NetClient");
|
||||||
|
|
||||||
|
// Also initialize session objects
|
||||||
|
CNetClient::CServerSession::ScriptingInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CNetClient::JSI_BeginConnect(JSContext* UNUSED(cx), uintN argc, jsval *argv)
|
bool CNetClient::JSI_BeginConnect(JSContext* UNUSED(cx), uintN argc, jsval *argv)
|
||||||
|
@ -21,13 +21,13 @@ class CNetClient: public CNetSession, protected CTurnManager, public CJSObject<C
|
|||||||
{
|
{
|
||||||
class CServerSession: public CJSObject<CServerSession>
|
class CServerSession: public CJSObject<CServerSession>
|
||||||
{
|
{
|
||||||
static void ScriptingInit();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CServerSession(int sessionID, const CStrW& name);
|
CServerSession(int sessionID, const CStrW& name);
|
||||||
|
|
||||||
int m_SessionID;
|
int m_SessionID;
|
||||||
CStrW m_Name;
|
CStrW m_Name;
|
||||||
|
|
||||||
|
static void ScriptingInit();
|
||||||
};
|
};
|
||||||
typedef std::map<int, CServerSession *> SessionMap;
|
typedef std::map<int, CServerSession *> SessionMap;
|
||||||
|
|
||||||
|
@ -103,6 +103,9 @@ void CNetServer::ScriptingInit()
|
|||||||
AddProperty(L"onClientDisconnect", &CNetServer::m_OnClientDisconnect);
|
AddProperty(L"onClientDisconnect", &CNetServer::m_OnClientDisconnect);
|
||||||
|
|
||||||
CJSObject<CNetServer>::ScriptingInit("NetServer");
|
CJSObject<CNetServer>::ScriptingInit("NetServer");
|
||||||
|
|
||||||
|
// Also initialize CNetServerSession
|
||||||
|
CNetServerSession::ScriptingInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CNetServer::JSI_Open(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv))
|
bool CNetServer::JSI_Open(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv))
|
||||||
|
@ -15,9 +15,6 @@ CNetServerSession::CNetServerSession(CNetServer *pServer, CSocketInternal *pInt,
|
|||||||
m_ID(-1),
|
m_ID(-1),
|
||||||
m_ReadyForTurn(false)
|
m_ReadyForTurn(false)
|
||||||
{
|
{
|
||||||
ONCE(
|
|
||||||
ScriptingInit();
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CNetServerSession::~CNetServerSession()
|
CNetServerSession::~CNetServerSession()
|
||||||
@ -204,12 +201,11 @@ bool CNetServerSession::InGameHandler(CNetMessage *pMsg, CNetSession *pNetSessio
|
|||||||
|
|
||||||
void CNetServerSession::ScriptingInit()
|
void CNetServerSession::ScriptingInit()
|
||||||
{
|
{
|
||||||
|
AddProperty( L"id", &CNetServerSession::m_ID );
|
||||||
|
AddProperty( L"name", (CStrW CNetServerSession::*)&CNetServerSession::m_Name );
|
||||||
AddMethod<bool, &CNetServerSession::JSI_Close>("close", 0);
|
AddMethod<bool, &CNetServerSession::JSI_Close>("close", 0);
|
||||||
|
|
||||||
CJSObject<CNetServerSession>::ScriptingInit("NetSession");
|
CJSObject<CNetServerSession>::ScriptingInit("NetSession");
|
||||||
// Hope this doesn't break anything...
|
|
||||||
AddProperty( L"id", &CNetServerSession::m_ID );
|
|
||||||
AddProperty( L"name", (CStrW CNetServerSession::*)&CNetServerSession::m_Name );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CNetServerSession::JSI_Close(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv))
|
bool CNetServerSession::JSI_Close(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv))
|
||||||
|
Loading…
Reference in New Issue
Block a user