diff --git a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Pch.h b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Pch.h
index 54c989d6..249c0b25 100644
--- a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Pch.h
+++ b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Pch.h
@@ -55,10 +55,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "pnNetBase/pnNetBase.h"
#include "pnAsyncCore/pnAsyncCore.h"
-#ifdef SERVER
-#include "pnCrash/pnCrash.h" // deadlock API
-#endif
-
#include "Private/pnAceInt.h"
#include "Private/W9x/pnAceW9x.h"
#include "Private/Nt/pnAceNt.h"
diff --git a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Nt/pnAceNt.cpp b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Nt/pnAceNt.cpp
index bdf476f7..d41d3a94 100644
--- a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Nt/pnAceNt.cpp
+++ b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Nt/pnAceNt.cpp
@@ -267,19 +267,9 @@ static unsigned THREADCALL NtWorkerThreadProc (AsyncThread * thread) {
);
if (op) {
- // Queue for deadlock detection
- #ifdef SERVER
- void * check = CrashAddDeadlockCheck(thread->handle, L"pnAceNt.NtWorkerThread");
- #endif
-
// Dispatch event to app
INtOpDispatch(ntObj, op, bytes);
-
- // Unqueue from deadlock detection
- #ifdef SERVER
- CrashRemoveDeadlockCheck(check);
- #endif
-
+
sleepMs = 0;
continue;
}
diff --git a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Win32/pnAceW32Thread.cpp b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Win32/pnAceW32Thread.cpp
index 883b13a0..40eb11d6 100644
--- a/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Win32/pnAceW32Thread.cpp
+++ b/Sources/Plasma/NucleusLib/pnAsyncCoreExe/Private/Win32/pnAceW32Thread.cpp
@@ -137,16 +137,8 @@ static unsigned THREADCALL ThreadTaskProc (AsyncThread * thread) {
PerfAddCounter(kAsyncPerfThreadTaskThreadsActive, 1);
if (task) {
- #ifdef SERVER
- void * check = CrashAddDeadlockCheck(thread->handle, task->debugStr);
- #endif
-
task->callback(task->param, task->taskList->error);
- #ifdef SERVER
- CrashRemoveDeadlockCheck(check);
- #endif
-
task->taskList->DecRef("task");
delete task;
}
diff --git a/Sources/Plasma/NucleusLib/pnCrash/CMakeLists.txt b/Sources/Plasma/NucleusLib/pnCrash/CMakeLists.txt
deleted file mode 100644
index 855787ba..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-include_directories(../../CoreLib)
-include_directories(../../NucleusLib)
-
-set(pnCrash_SOURCES
- pnCrash.cpp
-)
-
-set(pnCrash_HEADERS
- Pch.h
- pnCrash.h
-)
-
-add_library(pnCrash STATIC ${pnCrash_SOURCES} ${pnCrash_HEADERS})
-
-source_group("Source Files" FILES ${pnCrash_SOURCES})
-source_group("Header Files" FILES ${pnCrash_HEADERS})
\ No newline at end of file
diff --git a/Sources/Plasma/NucleusLib/pnCrash/Pch.h b/Sources/Plasma/NucleusLib/pnCrash/Pch.h
deleted file mode 100644
index fc24d53c..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/Pch.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnCrash/Pch.h
-*
-***/
-
-#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASH_PCH_H
-#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnCrash/Pch.h included more than once"
-#endif
-#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASH_PCH_H
-
-
-#include "pnUtils/pnUtils.h"
diff --git a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.bat b/Sources/Plasma/NucleusLib/pnCrash/pnCrash.bat
deleted file mode 100644
index 90d9a8b1..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.bat
+++ /dev/null
@@ -1,6 +0,0 @@
-@echo off
-:Top
- echo Running pnCrash.py
- C:\Python23\python pnCrash.py
- Sleep 1
-goto :Top
diff --git a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.cpp b/Sources/Plasma/NucleusLib/pnCrash/pnCrash.cpp
deleted file mode 100644
index a1907119..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnCrash/pnCrash.cpp
-*
-***/
-
-#include "Pch.h"
-#pragma hdrstop
diff --git a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.h b/Sources/Plasma/NucleusLib/pnCrash/pnCrash.h
deleted file mode 100644
index 36e2ae81..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
-*==LICENSE==*/
-/*****************************************************************************
-*
-* $/Plasma20/Sources/Plasma/NucleusLib/pnCrash/pnCrash.h
-*
-***/
-
-#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASH_PNCRASH_H
-#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASH_PNCRASH_H
-
-
-/*****************************************************************************
-*
-* Crash API
-*
-***/
-
-void CrashExceptionDump (const char occasion[], void * info);
-
-void CrashSetEmailParameters (
- const char smtp[],
- const char sender[],
- const char recipients[], // separate multiple recipients with semicolons
- const char username[], // optional (see auth notes in pnMail.h)
- const char password[], // optional (see auth notes in pnMail.h)
- const char replyTo[] // optional
-);
-
-void * CrashAddModule (
- uintptr_t address,
- unsigned buildId,
- unsigned branchId,
- const wchar_t name[],
- const wchar_t buildString[]
-);
-
-void CrashRemoveModule (
- void * module
-);
-
-
-/*****************************************************************************
-*
-* Deadlock detection (server only)
-*
-***/
-
-#ifdef SERVER
-void * CrashAddDeadlockCheck (void * thread, const wchar_t debugstr[] );
-void CrashRemoveDeadlockCheck (void * check);
-void CrashSetDeadlockCheckTimes (unsigned emailSec, unsigned terminateSec);
-// returns previous setting
-bool CrashEnableDeadlockChecking (bool enable);
-void CrashDeadlockCheckNow ();
-void CrashSendThreadReport ();
-#endif
-
-
-#endif // PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNCRASH_PNCRASH_H
diff --git a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.py b/Sources/Plasma/NucleusLib/pnCrash/pnCrash.py
deleted file mode 100644
index 582a2325..00000000
--- a/Sources/Plasma/NucleusLib/pnCrash/pnCrash.py
+++ /dev/null
@@ -1,469 +0,0 @@
-""" *==LICENSE==*
-
-CyanWorlds.com Engine - MMOG client, server and tools
-Copyright (C) 2011 Cyan Worlds, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-Additional permissions under GNU GPL version 3 section 7
-
-If you modify this Program, or any covered work, by linking or
-combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
-NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
-JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
-(or a modified version of those libraries),
-containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
-PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
-JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
-licensors of this Program grant you additional
-permission to convey the resulting work. Corresponding Source for a
-non-source form of such a combination shall include the source code for
-the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
-work.
-
-You can contact Cyan Worlds, Inc. by email legal@cyan.com
- or by snail mail at:
- Cyan Worlds, Inc.
- 14617 N Newport Hwy
- Mead, WA 99021
-
- *==LICENSE==* """
-import sys, os, re, poplib, smtplib, time
-
-
-#*****************************************************************************
-#*
-#* Private data
-#*
-#***
-
-s_pop3Srv = 'catherine.cyan.com'
-s_pop3User = 'crashhandler'
-s_pop3Pass = 'crashhandler'
-
-s_smtpSrv = 'catherine.cyan.com'
-#s_smtpRecipients = ['eric@cyan.com']
-s_smtpRecipients = ['crash2@cyan.com']
-
-#s_mapFileBasePath = 'P:\\Plasma20\\Scripts\\Server\\Admin\\';
-s_mapFileBasePath = '\\\\dirtcake\\MapFiles\\';
-
-s_modules = {}
-s_mapfiles = {}
-s_sortedModuleKeys = []
-
-
-#*****************************************************************************
-#*
-#* Local functions
-#*
-#***
-
-#=============================================================================
-def UndecorateCppName (name):
- name = re.sub('^\?', '', name, 1)
- name = re.sub('^_', '', name, 1)
- name = re.sub('@', ' ', name)
- name = re.sub('\s+', ' ', name)
- return name
-
-#=============================================================================
-# returns index of the first entry for which 'eval' returns false
-def bsearch (a, eval):
- low = 0
- high = len(a)
-
- if low != high:
- while True:
- mid = (low + high) // 2
- result = eval(a[mid])
- if result > 0:
- if mid == low:
- break
- low = mid
- else:
- high = mid
- if mid == low:
- break
- return high
-
-
-#*****************************************************************************
-#*
-#* Function class
-#*
-#***
-
-class Function:
-
- #=========================================================================
- def __init__ (self, name, baseAddr, relocAddr, module):
- self.name = UndecorateCppName(name)
- self.baseAddr = baseAddr
- self.relocAddr = relocAddr
- self.module = module
- #print "Function: %08x,%s,%s" % (self.relocAddr, self.module, self.name)
-
-
-#*****************************************************************************
-#*
-#* Mapfile class
-#*
-#***
-
-class Mapfile:
- #=========================================================================
- def __init__ (self, filename):
- self.filename = filename
- self.prefLoadAddr = 0
- self.functions = {}
- self.sortedFunctionKeys = []
-
- try:
- file = open(filename, 'rb')
-# print "mapfile opened " + filename
- lines = file.readlines()
- file.close()
- self.ParseMapfile(lines)
- except IOError:
-# print 'mapfile not found: ' + filename
- pass
-
- #=========================================================================
- def ParseMapfile (self, lines):
- # Preferred load address is xxxxxxxx
- pattern = re.compile('\s*Preferred.*([\dA-Fa-f]{8})')
- for line in lines:
- match = pattern.match(line)
- if not match:
- continue
- self.prefLoadAddr = int(match.group(1), 16)
- break
-
- # section:baseAddr functionName relocAddr flags module
- pattern = re.compile('^\s?([\dA-Fa-f]{4}:[\dA-Fa-f]{8})\s+(\S+)\s+([\dA-Fa-f]{8})\s(.)\s.\s(\S+)')
- for line in lines:
- match = pattern.match(line)
- if not match:
- continue
- baseAddr = match.group(1)
- name = match.group(2)
- relocAddr = int(match.group(3), 16)
- if match.group(4) != 'f':
- continue
- module = match.group(5)
- if self.functions.has_key(relocAddr):
-# print " duplicate: %s %08x %s" % (baseAddr, relocAddr, name)
-# print " with : %s %08x %s" % (self.functions[relocAddr].baseAddr, self.functions[relocAddr].relocAddr, self.functions[relocAddr].name)
- pass
- else:
- self.functions[relocAddr] = Function(name, baseAddr, relocAddr, module)
-
- self.sortedFunctionKeys = self.functions.keys()
- self.sortedFunctionKeys.sort()
-# print " function count: %u" % (len(self.sortedFunctionKeys))
-
- #=========================================================================
- def FindNearestFunction (self, relocAddr):
-
- #=====================================================================
- def eval (a, b=relocAddr):
- return b > a
-
- index = bsearch(self.sortedFunctionKeys, eval)
- if index > 0 and index < len(self.sortedFunctionKeys):
- return self.functions[self.sortedFunctionKeys[index-1]]
- return Function(" relocAddr %x" % (relocAddr), 0, relocAddr, self.filename)
-
-#=============================================================================
-def LoadMapfile (mapfilename):
- global s_mapfiles
- if not s_mapfiles.has_key(mapfilename):
- s_mapfiles[mapfilename] = Mapfile(mapfilename)
- return s_mapfiles[mapfilename]
-
-
-#*****************************************************************************
-#*
-#* Module class
-#*
-#***
-
-class Module:
- #=========================================================================
- def __init__ (self, loadAddr, name, buildId, buildMark):
-# print 'module: %s:%u, loadaddr: %08x' % (name, buildId, loadAddr)
- self.loadAddr = loadAddr
- self.name = name
- self.buildMark = buildMark
- self.buildId = buildId
- mapfilename = s_mapFileBasePath + buildMark + '\\' + name.split('.')[0].split('_')[0] + '.map'
- self.mapfile = LoadMapfile(mapfilename)
-
- #=========================================================================
- def FindNearestFunction (self, trueAddr):
- relocAddr = trueAddr + self.mapfile.prefLoadAddr - self.loadAddr
-# print 'searching for function near Pc:%08x, Ra:%08x in %s' % (trueAddr, relocAddr, self.mapfile.filename)
- function = self.mapfile.FindNearestFunction(relocAddr)
- if function:
-# print " found function %s, Ra:%08x, %s" % (function.baseAddr, function.relocAddr, function.name)
- return function
- print "Function not found for Pc:%08x, Ra:%08x in %s" % (trueAddr, relocAddr, self.mapfile.filename)
- return None
-
-
-#=============================================================================
-def FindNearestModule (loadAddr):
-
- #=========================================================================
- def eval (a, b=loadAddr):
- return b > a
-
- global s_modules
- global s_sortedModuleKeys
-
- if len(s_sortedModuleKeys) == 0:
- return None
-
- index = bsearch(s_sortedModuleKeys, eval)
- if index > 0 and index <= len(s_sortedModuleKeys):
- return s_modules[s_sortedModuleKeys[index-1]]
-
- print "Module not found for loadAddr %08x" % (loadAddr)
- return Module(loadAddr, " loadAddr %x" %(loadAddr), 0, "")
-
-
-
-#*****************************************************************************
-#*
-#* pnCrash class
-#*
-#***
-
-class pnCrash:
- #=========================================================================
- def SendCrash (self, msgLines, smtp):
- pass
-
- #=========================================================================
- def GetModules (self, msgLines):
- global s_modules
- global s_sortedModuleKeys
- # Parse modules and open mapfiles
- pattern = re.compile('^([\dA-Fa-f]{8})\s(.*)\((\d+)\.\d+\.(.*)\)')
- for line in msgLines:
- match = pattern.match(line)
- if not match:
- continue
- loadAddr = int(match.group(1), 16)
- filename = os.path.basename(match.group(2)).strip()
- buildId = int(match.group(3))
- buildMark = match.group(4)
- #assert not s_modules.has_key(loadAddr)
- s_modules[loadAddr] = Module(loadAddr, filename, buildId, buildMark)
- s_sortedModuleKeys = s_modules.keys()
- s_sortedModuleKeys.sort()
-
- # if no modules found, use the reporting application's info
- if len(s_sortedModuleKeys) == 0:
- buildId = 0
- loadAddr = int('00400000', 16) # temp hack
- patternApp = re.compile('^App\s+:\s+(.*)')
- patternBuildMark = re.compile('^BuildMark\s+:\s+(.*)')
- for line in msgLines:
- if patternApp:
- match = patternApp.match(line)
- if match:
- patternApp = None
- filename = os.path.basename(match.group(1)).strip().strip('\r\n')
- continue
- else:
- match = patternBuildMark.match(line)
- if match:
- buildMark = match.group(1).strip().strip('\r\n')
-# print 'No modules found, adding %s, %08x, %u, %s' % (filename, loadAddr, buildId, buildMark)
- s_modules[loadAddr] = Module(loadAddr, filename, buildId, buildMark)
- s_sortedModuleKeys = s_modules.keys()
- s_sortedModuleKeys.sort()
- break
-
-
- #=========================================================================
- def ConvertTraces (self, msgLines):
- lines = []
- callstack = []
- intrace = False
-
- pattern = re.compile('Pc:([\dA-Fa-f]{8})\s+Fr:[\dA-Fa-f]{8}\s+Rt:([\dA-Fa-f]{8})')
- for rawline in msgLines:
- line = rawline.strip('\r\n')
- if line.find('|') >= 0: # a previous conversion, skip over it
- continue
- lines.append(line)
- match = pattern.match(line)
- if not match:
- if intrace:
- callstack.append('')
- lines += callstack
- callstack = []
- lines.append('')
- intrace = False
- continue
- if not intrace:
- callstack.append('|--------> Callstack <--------')
- intrace = True
- returnAddr = int(match.group(2), 16)
- if not returnAddr:
- continue
- programCounter = int(match.group(1), 16)
- module = FindNearestModule(programCounter)
- function = module.FindNearestFunction(programCounter)
- callstack.append('| %s, %s:%s' % (function.name, function.module, module.name))
-
- if intrace:
- callstack.append('')
- lines += callstack
- callstack = []
- intrace = False
-
- return lines
-
-
- #=========================================================================
- def ProcessClientCrash(self, msgLines):
- lines = []
- fd = open('untranslated.txt', 'w')
- for x in msgLines:
- fd.write(x)
- fd.write('\n')
- fd.close()
- os.spawnl(os.P_WAIT, 'plStackTrace.exe', 'plStackTrace.exe', 'untranslated.txt')
- fd = open('out.txt', 'r')
- lines = fd.readlines()
- return lines
-
-
- #=========================================================================
- def ProcessCrash (self, msgLines, smtp):
- global s_modules
- global s_sortedModuleKeys
-
- subject = '[Crash]'
- pattern = re.compile('^Subject: (.*)$')
- serverPattern = re.compile('App : plServer.exe')
- serverCrash = 0
-
- for line in msgLines:
- match = serverPattern.match(line)
- if match:
- serverCrash = 1
- break
-
- if not serverCrash:
- subject = 'Client Crash Report'
-
- for line in msgLines:
- match = pattern.match(line)
- if match:
- subject = match.group(1)
- subject.strip('\r\n')
-
- from_ = 'crash2@cyan.com'
- pattern = re.compile('^From: (.*)$')
- for line in msgLines:
- match = pattern.match(line)
- if match:
- from_ = match.group(1)
- from_.strip('\r\n')
- break
-
- print "Rcvd: %s from %s" % (subject, from_)
-
- smtp.helo()
- smtp.mail(from_, [])
- for rcpt in s_smtpRecipients:
- smtp.rcpt(rcpt, [])
-
- lines = []
- lines.append('From: %s' % (from_))
- lines.append('Subject: %s' % (subject))
- lines.append('')
-
- if not serverCrash:
- lines += self.ProcessClientCrash(msgLines) # process client callstack
- for x in range(len(lines)):
- lines[x] = lines[x].strip('\r\n')
-
- if serverCrash:
- s_modules.clear()
- s_sortedModuleKeys = []
- self.GetModules(msgLines)
- lines += self.ConvertTraces(msgLines)
- s_sortedModuleKeys = []
- s_modules.clear()
-
- msg = '\n'.join([line for line in lines])
- smtp.data(msg)
- print "Sent: %s from %s" % (subject, from_)
-
-
- #=========================================================================
- def GetAndProcessCrashes (self):
- global s_mapfiles
- s_mapfiles.clear()
-
-# print "initializing pop3"
- pop3 = poplib.POP3(s_pop3Srv)
- pop3.user(s_pop3User)
- pop3.pass_(s_pop3Pass)
- pop3.list()
- (numMsgs, totalSize) = pop3.stat()
-
- if numMsgs > 0:
-# print "initializing smtp"
- smtp = smtplib.SMTP(s_smtpSrv)
-
-# print "retrieving emails"
- for i in range(1, numMsgs + 1):
- (header, msg, octets) = pop3.retr(i)
- self.ProcessCrash(msg, smtp)
- pop3.dele(i)
-
- smtp.quit()
-
- pop3.quit()
-
- s_mapfiles.clear()
-
- #=========================================================================
- def RunForever (self):
- global s_modules
- s_modules[0] = Module(0, "", 0, "")
- while 1:
- self.GetAndProcessCrashes()
- # sleep for an interruptable minute
- for i in range(1, 20):
- time.sleep(1)
-
-
-
-#*****************************************************************************
-#*
-#* Program entry point
-#*
-#***
-
-#=============================================================================
-if __name__ == '__main__':
- pnCrash().RunForever()
diff --git a/Sources/Plasma/NucleusLib/pnIniExe/Pch.h b/Sources/Plasma/NucleusLib/pnIniExe/Pch.h
index 6db9c723..d0917e4c 100644
--- a/Sources/Plasma/NucleusLib/pnIniExe/Pch.h
+++ b/Sources/Plasma/NucleusLib/pnIniExe/Pch.h
@@ -59,10 +59,4 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "pnIni/Intern.h"
-#ifdef SERVER
-#include "pnCrash/pnCrash.h"
-#endif
-
-
-
#include
diff --git a/Sources/Plasma/NucleusLib/pnIniExe/Private/Win32/pnW32IniChange.cpp b/Sources/Plasma/NucleusLib/pnIniExe/Private/Win32/pnW32IniChange.cpp
index d988aff8..4037c322 100644
--- a/Sources/Plasma/NucleusLib/pnIniExe/Private/Win32/pnW32IniChange.cpp
+++ b/Sources/Plasma/NucleusLib/pnIniExe/Private/Win32/pnW32IniChange.cpp
@@ -173,19 +173,9 @@ static unsigned THREADCALL IniSrvThreadProc (AsyncThread * thread) {
s_lock.LeaveWrite();
}
else if ((result == WAIT_OBJECT_0 + 1) || (result == WAIT_TIMEOUT)) {
- // Queue for deadlock check
- #ifdef SERVER
- void * check = CrashAddDeadlockCheck(thread->handle, L"plW32IniChange.NtWorkerThreadProc");
- #endif
-
s_lock.EnterWrite();
ChangeDispatch_WL(&marker);
s_lock.LeaveWrite();
-
- // Unqueue for deadlock check
- #ifdef SERVER
- CrashRemoveDeadlockCheck(check);
- #endif
}
else {
LogMsg(