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_Name(name)
|
||||
{
|
||||
ONCE( ScriptingInit(); );
|
||||
}
|
||||
|
||||
void CNetClient::CServerSession::ScriptingInit()
|
||||
@ -76,6 +75,9 @@ void CNetClient::ScriptingInit()
|
||||
AddProperty(L"sessions", &CNetClient::m_JSI_ServerSessions);
|
||||
CJSMap<SessionMap>::ScriptingInit("NetClient_SessionMap");
|
||||
CJSObject<CNetClient>::ScriptingInit("NetClient");
|
||||
|
||||
// Also initialize session objects
|
||||
CNetClient::CServerSession::ScriptingInit();
|
||||
}
|
||||
|
||||
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>
|
||||
{
|
||||
static void ScriptingInit();
|
||||
|
||||
public:
|
||||
CServerSession(int sessionID, const CStrW& name);
|
||||
|
||||
int m_SessionID;
|
||||
CStrW m_Name;
|
||||
|
||||
static void ScriptingInit();
|
||||
};
|
||||
typedef std::map<int, CServerSession *> SessionMap;
|
||||
|
||||
|
@ -103,6 +103,9 @@ void CNetServer::ScriptingInit()
|
||||
AddProperty(L"onClientDisconnect", &CNetServer::m_OnClientDisconnect);
|
||||
|
||||
CJSObject<CNetServer>::ScriptingInit("NetServer");
|
||||
|
||||
// Also initialize CNetServerSession
|
||||
CNetServerSession::ScriptingInit();
|
||||
}
|
||||
|
||||
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_ReadyForTurn(false)
|
||||
{
|
||||
ONCE(
|
||||
ScriptingInit();
|
||||
);
|
||||
}
|
||||
|
||||
CNetServerSession::~CNetServerSession()
|
||||
@ -204,12 +201,11 @@ bool CNetServerSession::InGameHandler(CNetMessage *pMsg, CNetSession *pNetSessio
|
||||
|
||||
void CNetServerSession::ScriptingInit()
|
||||
{
|
||||
AddProperty( L"id", &CNetServerSession::m_ID );
|
||||
AddProperty( L"name", (CStrW CNetServerSession::*)&CNetServerSession::m_Name );
|
||||
AddMethod<bool, &CNetServerSession::JSI_Close>("close", 0);
|
||||
|
||||
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))
|
||||
|
Loading…
Reference in New Issue
Block a user