Jump to content

mangos crashing on character creation


void513
 Share

Recommended Posts

im getting crashes during character creation.after i have picked ever thing for my character and hit the accept it crashes mangos .Here is the crash log

Revision: * * 11884 *

Date 25:1:2012. Time 11:21

//=====================================================

*** Hardware ***

Processor: <unknown>

Number Of Processors: 1

Physical Memory: 1310192 KB (Available: 540764 KB)

Commit Charge Limit: 3127652 KB

*** Operation System ***

Microsoft Windows XP Professional Service Pack 3 (Version 5.1, Build 2600)

//=====================================================

Exception code: C000001D ILLEGAL_INSTRUCTION

Fault address: 00682A83 01:00281A83 E:\\mangos\\mangosd.exe

Registers:

EAX:00000001

EBX:00000001

ECX:77C94000

EDX:00682A70

ESI:754F1BC0

EDI:75596D90

CS:EIP:001B:00682A83

SS:ESP:0023:077299B4 EBP:077299BC

DS:0023 ES:0023 FS:003B GS:0000

Flags:00010293

Call stack:

Address Frame Function SourceFile

00682A83 00000000 Aura::HandleAuraModRangedHaste+13

00680842 00000000 Aura::ApplyModifier+32

00680A07 00000000 SpellAuraHolder::ApplyAuraModifiers+27

004CC718 00000000 Unit::AddSpellAuraHolder+6A8

00756454 00000000 Spell::DoSpellHitOnUnit+544

0075744C 00000000 Spell::DoAllEffectOnTarget+15C

00757ABB 00000000 Spell::handle_immediate+4B

0076345C 00000000 Spell::cast+7AC

007637B4 00000000 Spell::prepare+1D4

004BF3BD 00000000 Unit::CastSpell+1ED

004C4232 00000000 Unit::CastSpell+102

0055E212 00000000 Player::addSpell+7F2

00560F7D 00000000 Player::learnDefaultSpells+BD

0056AB93 00000000 Player::Create+653

00833891 00000000 WorldSession::HandleCharCreateOpcode+761

006055D1 00000000 WorldSession::ExecuteOpcode+21

0060A9F1 00000000 WorldSession::Update+181

00487C74 00000000 World::UpdateSessions+94

00489C52 00000000 World::Update+172

00455242 00000000 WorldRunnable::run+52

00466D10 00000000 ACE_Based::Thread::ThreadTask+10

00A57064 00000000 [email protected][email protected]@UAEKXZ+74

78AFC556 00000000 _endthreadex+3A

78AFC600 00000000 _endthreadex+E4

7C80B729 00000000 GetModuleFileNameA+1BA

Call stack:

Address Frame Function SourceFile

7C90E514 00000000 KiFastSystemCallRet+0

7C802542 00000000 WaitForSingleObject+12

00A0AB83 00000000 [email protected]@[email protected]+363

00A7DF91 00000000 [email protected][email protected]@[email protected]@@Z+1E1

00A79D6F 00000000 [email protected][email protected]@UAEHXZ+F

004508BA 00000000 main+3FA

00457459 00000000 __tmainCRTStartup+122

7C817077 00000000 RegisterWaitForInputIdle+49

Call stack:

Address Frame Function SourceFile

7C90E514 00000000 KiFastSystemCallRet+0

7C802455 00000000 Sleep+F

00466E2E 00000000 ACE_Based::Thread::Sleep+3E

0046843D 00000000 SqlDelayThread::run+2D

00466D10 00000000 ACE_Based::Thread::ThreadTask+10

00A57064 00000000 [email protected][email protected]@UAEKXZ+74

78AFC556 00000000 _endthreadex+3A

78AFC600 00000000 _endthreadex+E4

7C80B729 00000000 GetModuleFileNameA+1BA

Call stack:

Address Frame Function SourceFile

7C90E514 00000000 KiFastSystemCallRet+0

7C802455 00000000 Sleep+F

00466E2E 00000000 ACE_Based::Thread::Sleep+3E

0046843D 00000000 SqlDelayThread::run+2D

00466D10 00000000 ACE_Based::Thread::ThreadTask+10

00A57064 00000000 [email protected][email protected]@UAEKXZ+74

78AFC556 00000000 _endthreadex+3A

78AFC600 00000000 _endthreadex+E4

7C80B729 00000000 GetModuleFileNameA+1BA

Call stack:

Address Frame Function SourceFile

7C90E514 00000000 KiFastSystemCallRet+0

7C802455 00000000 Sleep+F

00466E2E 00000000 ACE_Based::Thread::Sleep+3E

0046843D 00000000 SqlDelayThread::run+2D

00466D10 00000000 ACE_Based::Thread::ThreadTask+10

00A57064 00000000 [email protected][email protected]@UAEKXZ+74

78AFC556 00000000 _endthreadex+3A

78AFC600 00000000 _endthreadex+E4

7C80B729 00000000 GetModuleFileNameA+1BA

Call stack:

Address Frame Function SourceFile

7C90E514 00000000 KiFastSystemCallRet+0

07728A38 00000000 0000:00000000

454C15FF 00000000

Link to comment
Share on other sites

Confirming this, SSE needs to be disabled before building the project.

Right-click every project in the solution, go to Properties -> Configuration Properties -> C/C++ -> Code Generation and set Enable Enhanced Instruction Set to Not Set, then rebuild the solution.

Link to comment
Share on other sites

I too can confirm that this is a problem with SSE/SSE2 instructions on SSE1 only CPU's. I disabled all SSE instructions and it worked afterwards, but I believe someone else disabled SSE on a component by component (not quite sure what the jargon is since I'm relatively new to compiling) basis and found out there were 2 component libraries that were giving these problems. So turning off SSE for only those components works well too.

I use this for an old Pentium III 933 MHz machine, but I've read about the same problem occurring on Athlon XP machines, which also have SSE1, but not SSE2.

Link to comment
Share on other sites

As far as I know the compiler just turns on all the optimizations that the CPU supports. The problem here is that while the CPU in question here supports SSE1, it does not support SSE2, and somehow the compiler puts in some SSE2 instructions anyway, even when specifically being told to only use SSE1 instructions.

When I first got this problem I manually turned SSE2 off, but left SSE1 on, since my CPU supports SSE1. This did not work because somehow unsupported instructions were used anyway. Only turning off all SSE worked.

SSE is not simply for multimedia, its a set of SIMD instructions, Single Instruction Multiple Data, so a single instruction can be used on multiple pieces of data simultaneously. It could speed some things up if the same thing has to be done to many pieces of data, doing many of them simultaneously. SSE1 is only 32 bit, single precision, and on the old Pentium III SSE instructions were pretty slow.

Link to comment
Share on other sites

The instructions that are used are decided by the compiler, it would probably take writing some extra subroutines, some that specifically use SSE and some that don't, for the same purpose, and the option to switch between them, to make it possible to disable it after compiling. I don't know how other software do that, which offer the option to turn off and on different instruction-set extensions.

And as far as I remember the problem lies in some included libraries, not the mangos code itself. It took me about ten rounds of re-compiling before I actually figured out the problem, but this is not the first time it has come up on this forum, so the old threads should show up in a search.

Turning SSE off in the compiler isn't so much work, at least in the microsoft compiler I use, I don't know if this same problem exists when using GCC and linux, or how you would turn off SSE there, this would interest me since I do plan on switching to linux.

Making instruction set extensions switchable in a .conf file would only make sense if you wanted to use the compiled binary on many different systems. to me Compiling an optimized binary for every different system seems to me to be the best solution performance-wise though.

Link to comment
Share on other sites

Thanks for clearing things up regarding SSE. With all the hype around its introduction, I just assumed SSE was the next-gen implementation of the older multimedia extensions.

It is annoying that MS makes assumptions about what compiler configuration you'll use. If they're going to do that, you'd think there would be a wizard of some sort that activates upon first-run to allow you the opportunity to make your own choices regarding those extra features. Then again, I've noticed MS tends to labor under the false belief that you're going to have the latest hardware and Windows version to support all those doodads.

I'm still an XP user and only recently made the switch to Service Pack 3. I use VC++ 2008 for compiling projects like MaNGOS. Now I'm curious if this compiler has similar default settings. Once I do dip my toes into the Linux waters, I'm hoping that GCC makes no assumptions and leaves it up to the user to properly configure their developer environment. I have the feeling they probably do for most distros, with the possible exception of Windows-like distros such as Ubuntu.

Link to comment
Share on other sites

The main problem is, turning off SSE2 doesn't seem to fully turn off SSE2 in at least the couple of components that give problems, if this is a problem with the compiler, or the code in those components I don't know.

So it's not logical that you have to turn off SSE1 as well, even if your CPU does support SSE1, but to make it work you do have to.

When I first ran into this problem the first thing I tried was to turn off SSE2 manually, while leaving SSE1 on, when this didn't work I thought it wasn't a problem with SSE and went on to look for the problem elsewhere, so it took me a lot of testing and recompiling before I actually tried turning off SSE1 as well, because it doesn't make sense that this would be the problem, but it worked.

So if you have a machine that doesn't support SSE2, turn off all SSE, even if your machine does support SSE1.

I really don't like this solution though, it feels hacky, since there is obviously a problem somewhere in the code of the affected libraries, or in the compiler, this just avoids the problem, but it would be nice to know where the problem really lies.

The compiler I use is VC++ 2010, I have no idea if there is a problem with other compilers, this would probably be good to know, since it might just be the compiler's fault.

Link to comment
Share on other sites

VS2010 has become rather infamous for bugs and being very slow to load, at least nearly every developer's blog I've read has little good to say about it.

It may be that MS has since fixed some of these issues, but I know Service Pack 1 introduced new problems, such as the compiler breaking if you install the Platform SDK after installing SP1. The VC++ 2010 runtime that is installed with the compiler suite also breaks the June 2010 DirectX 9.0c SDK installer. The version that the DX9 SDK expects is different, so you have to uninstall the VC++ runtime that comes with Visual Studio, install the DX9 SDK, then reinstall the offending runtime. The same also applies to any versions of the VC++ 2010 redistributable runtimes released after the DX9 SDK.

All the more reason to adopt Linux! :lol:

Link to comment
Share on other sites

I'm not trying to imply that Visual Studio as an IDE, regardless of the version, is complete crap.

The GUI and features are remarkably well done, polished to a very fine degree that makes using VS a pleasure when measured against to comparable tools from other vendors. However, it takes more than pretty buttons and drop-down menus to make a good developer tool-chain.

If you enjoy using VS 2010, then that's great and I wish you many happy hours of coding. It does not change my opinion that VS 2010 is not Microsoft's best effort and older versions do have the advantage of speed, which means less time spent waiting and more time programming.

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use