Which version is thiss off? x.10?
Printable View
Which version is thiss off? x.10?
Thanks fran... will give it a go.
Update: tried a normal 'patch' and it failed. what's the proper patch options / command?
Update tp the update.. nevermind ;) 'patch -p0 < file' seems to work. I had -p1 and it didn't.
A bit more experimentation, and I am no closer to understanding why this happens... hits my main most of the time. if I have SEQ follow an alt in group it happens far less but still eventually will seg out with pretty much the same backtrace above. I messed around with just ignoring the lastkill code but that created downstream issues elsewhere. Any thoughts on what's happening with that code and why it's important?
Found another consistent segfault. I seem much better at finding issues than solving them lately.
Happens when I zone into bazaar:Code:#0 0x006a6d80 in strcpy () from /lib/libc.so.6
#1 0x0806f868 in SpawnShell::fillSpawnStruct (this=0x8363b00, spawn=0x87d4da8, data=0x854d93c "", len=469, checkLen=true) at spawnshell.cpp:709
#2 0x08073298 in SpawnShell::zoneEntry (this=0x8363b00, data=0x854d93c "", len=469) at spawnshell.cpp:740
#3 0x08075238 in SpawnShell::qt_invoke (this=0x8363b00, _id=8, _o=0xbfffc390) at spawnshell.moc:395
#4 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#5 0x080905ff in EQPacketDispatch::signal (this=0x8471ba0, t0=0x854d93c "", t1=469, t2=2 '\002') at packetinfo.moc:99
#6 0x08089eb9 in EQPacketStream::dispatchPacket (this=0x83410a8, data=0x854d93c "", len=469, opCode=24744, opcodeEntry=0x83c37a8)
at packetstream.cpp:435
#7 0x0808c29b in EQPacketStream::processPacket (this=0x83410a8, packet=..., isSubpacket=true) at packetstream.cpp:754
#8 0x0808c5ad in EQPacketStream::processPacket (this=0x83410a8, packet=..., isSubpacket=false) at packetstream.cpp:892
#9 0x0808cc30 in EQPacketStream::handlePacket (this=0x83410a8, packet=...) at packetstream.cpp:572
#10 0x08093252 in EQPacket::dispatchPacket (this=0x8482e30, packet=...) at packet.cpp:659
#11 0x08095b25 in dispatchPacket (this=0x8482e30) at packet.cpp:583
#12 EQPacket::processPackets (this=0x8482e30) at packet.cpp:400
#13 0x08095e00 in EQPacket::qt_invoke (this=0x8482e30, _id=2, _o=0xbfffe768) at packet.moc:577
#14 0x04185642 in QObject::activate_signal(QConnectionList*, QUObject*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#15 0x04185724 in QObject::activate_signal(int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#16 0x044ccc5a in QTimer::timeout() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#17 0x041a5e3e in QTimer::event(QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#18 0x04123ffd in QApplication::internalNotify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#19 0x0412418b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#20 0x0411823c in QEventLoop::activateTimers() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#21 0x040d3182 in QEventLoop::processEvents(unsigned int) () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#22 0x04139b50 in QEventLoop::enterLoop() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#23 0x04139ad7 in QEventLoop::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#24 0x04124d20 in QApplication::exec() () from /usr/lib/qt-3.3/lib/libqt-mt.so.3
#25 0x08067a8b in main (argc=1, argv=0xbffff3f4) at main.cpp:737
I'm not crashing zoning into the bazaar but I did notice that I only picked up PCs within about 50 feet from my char. I do seem to pick up new chars anywhere in zone when they zone in. For some strange reason I have noticed this problem in other zones. Some effect of them being in trader mode, perhaps?
I haven't had any time to play this weekend, I'll try to get on alter and see if I'm running into the other crash you're talking about.
commenting out line 800 of player.cpp will keep it from crashing until a proper fix is figured out.
updated playerSelfPosStruct, only thing that was in the wrong place was "animation", which is the player's velocity (signed, walking backwards makes it negative).
I can't find anywhere in the code animation is actually used, or why it's called animation. Maybe it used to be something else.
padding2 was always 0x17, rest were 0, during my testing
Code:struct playerSelfPosStruct
{
/*0000*/ uint16_t unknown0000; // ***Placeholder (update time counter?)
/*0002*/ uint16_t spawnId; // Player's spawn id
/*0004*/ uint16_t unknown0004; // ***Placeholder
/*0006*/ unsigned pitch:12; // pitch (up/down heading)
unsigned heading:12; // Directional heading
unsigned padding1:8; // ***Placeholder
/*0010*/ float y; // y coord (2nd loc value)
/*0014*/ float deltaZ; // Change in z
/*0018*/ float z; // z coord (3rd loc value)
/*0022*/ signed deltaHeading:10; // change in heading
unsigned padding2:10; // ***Placeholder
unsigned padding3:12; // ***Placeholder
/*0026*/ float x; // x coord (1st loc value)
/*0030*/ float deltaX; // Change in y
/*0034*/ float deltaY; // Change in x
/*0038*/ signed animation:10; // velocity
unsigned padding4:10; // ***Placeholder
unsigned padding5:12; // ***Placeholder
/*0042*/
};
I got everything in the right spot in playerSpawnPosStruct, and also found where pitch is and labeled it. For players this is the direction they are looking up/down.
Code:struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
/*0002*/ uint16_t spawnId2;
/*0004*/ unsigned pitch:12;
signed deltaZ:13; // change in z
unsigned padding01:7;
/*0008*/ signed deltaHeading:10;// change in heading
signed x:19; // x coord
unsigned padding02:3;
/*0012*/ unsigned heading:12; // heading
signed deltaY:13; // change in y
unsigned padding03:7;
/*0016*/ signed deltaX:13; // change in x
signed y:19; // y coord
/*0020*/ signed animation:10; // velocity
signed z:19; // z coord
unsigned padding04:3;
/*0024*/
};
Thanks, it's looking pretty good. I'm not sure if the changes from the last couple bugs fixed something I had wrong but now I get crashes in the baz too. Not a bit deal to me, just thought I'd mention it.
Even without the updates I didn't crash last night during a raid.
I believe I understand 'Animation'. Remember, the server does not send an update for every *single* position update for every character on the screen. It provides basically a point and a velocity vector, and the client-side code computes a new positions for every frame based on this. This is what causes the so-called 'rubber-band' effect. The server is delayed, and the client machine continues to project motion along the previous vector, and then discovers, when it finally gets an update, that the actual position is different than the projected position, and instantly corrects it. Animation is, then, used to 'fill in' the character / mob motion between server updates.
... and I crashed tonight. Line 800 in player.cpp was commented out.
Yea, we really need to figure out the segfaults. I cant run for more than ten minutes without dieing -- makes ShowEQ useless cause you have to zone to refresh the display.
Time to put more money in the ieatacid machine :)
I get the same crash when I kill a mob
Code:#0 0x000000000042e3c0 in QShared::deref (this=0xffffff0044495254)
at /usr/lib64/qt-3.3/include/qshared.h:53
53 bool deref() { return !--count; }
#1 0x00007ffff7ab98fa in QString::deref (this=0xc08580)
at tools/qstring.cpp:1552
1552 if ( d && d->deref() ) {
#2 0x00007ffff7ab99ab in QString::operator= (this=0xc08580, s=...)
at tools/qstring.cpp:1597
1597 deref();
#3 0x00000000004c3795 in Player::setLastKill (this=0xc072f0, name=...,
level=1) at player.cpp:800
800 m_lastSpawnKilledName = name;
#4 0x0000000000437c85 in SpawnShell::killSpawn (this=0xa8d2c0,
data=0xc02437 "[]") at spawnshell.cpp:1485
1485 m_player->setLastKill(spawn->name(), spawn->level());