EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Bug Reports (https://www.eqemulator.org/forums/forumdisplay.php?f=591)
-   -   Rev706 (https://www.eqemulator.org/forums/showthread.php?t=28667)

blackdragonsdg 06-23-2009 04:37 AM

Rev706
 
Ran into several problems, first off in Rev705 everything would compile and run just fine but only the general tab in aa's was showing up in game even though the aa tables are in the database. So I recompiled with Rev706 and now I get a nasty zone.exe crash at the character select screen when attempting to actually enter the game world.
No errors show in the log files but here is the debug and app crash information:

'Zone.exe': Loaded 'C:\Windows\SysWOW64\WSHTCPIP.DLL'
'Zone.exe': Loaded 'C:\Program Files (x86)\EQEmu\EMuShareMem.dll', Binary was not built with debug information.
The thread 'Win32 Thread' (0xfd8) has exited with code 0 (0x0).
Unhandled exception at 0x004c2f7c in Zone.exe: 0xC00000FD: Stack overflow.
The program '[3388] Zone.exe: Native' has exited with code 0 (0x0).


Problem signature:
Problem Event Name: APPCRASH
Application Name: zone.exe
Application Version: 0.0.0.0
Application Timestamp: 4a409006
Fault Module Name: zone.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 4a409006
Exception Code: c00000fd
Exception Offset: 000c2f7c
OS Version: 6.0.6002.2.2.0.256.1
Locale ID: 1033
Additional Information 1: fd00
Additional Information 2: ea6f5fe8924aaa756324d57f87834160
Additional Information 3: fd00
Additional Information 4: ea6f5fe8924aaa756324d57f87834160

gaeorn 06-23-2009 11:41 AM

Could you provide the last 20 lines or so of eqemu_debug_zone.log. Thanks.

gaeorn 06-23-2009 11:52 AM

Actually, looking through the changes, I'm guessing the problem is in one particular portion of the changes. This patch removes those changes. Please apply this patch, recompile and then let us know if the zone.exe crash still occurs. Thanks.

Code:

Index: common/MiscFunctions.cpp
===================================================================
--- common/MiscFunctions.cpp    (revision 706)
+++ common/MiscFunctions.cpp    (revision 705)
@@ -59,10 +59,6 @@
        #include <errno.h>
 #endif
 
-#ifndef va_copy
-      #define va_copy(d,s) ((d) = (s))
-#endif
-
 void CoutTimestamp(bool ms) {
        time_t rawtime;
        struct tm* gmt_t;
@@ -151,7 +147,7 @@
 int MakeAnyLenString(char** ret, const char* format, ...) {
        int buf_len = 128;
    int chars = -1;
-      va_list argptr, tmpargptr;
+      va_list argptr;
        va_start(argptr, format);
        while (chars == -1 || chars >= buf_len) {
                safe_delete_array(*ret);
@@ -160,8 +156,7 @@
                else
                        buf_len = chars + 1;
                *ret = new char[buf_len];
-              va_copy(tmpargptr, argptr);
-              chars = vsnprintf(*ret, buf_len, format, tmpargptr);
+              chars = vsnprintf(*ret, buf_len, format, argptr);
        }
        va_end(argptr);
        return chars;
@@ -174,7 +169,7 @@
                *strlen = 0;
    int chars = -1;
        char* oldret = 0;
-      va_list argptr, tmpargptr;
+      va_list argptr;
        va_start(argptr, format);
        while (chars == -1 || chars >= (sint32)(*bufsize-*strlen)) {
                if (chars == -1)
@@ -188,8 +183,7 @@
                                memcpy(*ret, oldret, *strlen);
                        safe_delete_array(oldret);
                }
-              va_copy(tmpargptr, argptr);
-              chars = vsnprintf(&(*ret)[*strlen], (*bufsize-*strlen), format, tmpargptr);
+              chars = vsnprintf(&(*ret)[*strlen], (*bufsize-*strlen), format, argptr);
        }
        va_end(argptr);
        *strlen += chars;
Index: common/debug.cpp
===================================================================
--- common/debug.cpp    (revision 706)
+++ common/debug.cpp    (revision 705)
@@ -20,10 +20,6 @@
 #endif
 #include "../common/MiscFunctions.h"
 
-#ifndef va_copy
-      #define va_copy(d,s) ((d) = (s))
-#endif
-
 static volatile bool logFileValid = false;
 static EQEMuLog realLogFile;
 EQEMuLog *LogFile = &realLogFile;
@@ -148,16 +144,13 @@
                fprintf(fp[id], "%04i [%02d.%02d. - %02d:%02d:%02d] ", getpid(), newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec);
 #endif
 
-      va_list argptr, tmpargptr;
+      va_list argptr;
        va_start(argptr, fmt);
-      if (dofile) {
-              va_copy(tmpargptr, argptr);
-              vfprintf( fp[id], fmt, tmpargptr );
-      }
+    if (dofile)
+              vfprintf( fp[id], fmt, argptr );
        if(logCallbackFmt[id]) {
                msgCallbackFmt p = logCallbackFmt[id];
-              va_copy(tmpargptr, argptr);
-              p(id, fmt, tmpargptr );
+              p(id, fmt, argptr );
        }
    if (pLogStatus[id] & 2) {
                if (pLogStatus[id] & 8) {
@@ -211,21 +204,17 @@
    time( &aclock );                /* Get time in seconds */
    newtime = localtime( &aclock );  /* Convert time to struct */
 
-      va_list tmpargptr;
-
    if (dofile) {
 #ifndef NO_PIDLOG
                fprintf(fp[id], "[%02d.%02d. - %02d:%02d:%02d] %s", newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec, prefix);
 #else
                fprintf(fp[id], "%04i [%02d.%02d. - %02d:%02d:%02d] %s", getpid(), newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec, prefix);
 #endif
-              va_copy(tmpargptr, argptr);
-              vfprintf( fp[id], fmt, tmpargptr );
+              vfprintf( fp[id], fmt, argptr );
    }
        if(logCallbackPva[id]) {
                msgCallbackPva p = logCallbackPva[id];
-              va_copy(tmpargptr, argptr);
-              p(id, prefix, fmt, tmpargptr );
+              p(id, prefix, fmt, argptr );
        }
    if (pLogStatus[id] & 2) {
                if (pLogStatus[id] & 8) {
@@ -306,12 +295,10 @@
 }
 
 bool EQEMuLog::writeNTS(LogIDs id, bool dofile, const char *fmt, ...) {
-      va_list argptr, tmpargptr;
+      va_list argptr;
        va_start(argptr, fmt);
-      if (dofile) {
-              va_copy(tmpargptr, argptr);
-              vfprintf( fp[id], fmt, tmpargptr );
-      }
+      if (dofile)
+              vfprintf( fp[id], fmt, argptr );
    if (pLogStatus[id] & 2) {
                if (pLogStatus[id] & 8)
                        vfprintf( stderr, fmt, argptr );


gaeorn 06-23-2009 12:22 PM

Actually, before you try that patch, try rev 707. I forgot there was a slight error in 706 that might have undesirable consequences.

blackdragonsdg 06-23-2009 04:45 PM

Guess that silent error was the culprit. At Rev708 the crash bug is gone so whatever change was made worked. Thanks for looking into it the problem.

trevius 06-23-2009 05:43 PM

The issue with AAs only showing up on the general tab only happens in SoF. That was caused by the changes I made a few revisions ago that make it so SoF can use the same table as Titanium, but have a few different settings that it needs. The work on the AA tables is not finished yet, so there are sure to be changes. Once the AA stuff is finalized, there will definitely be an update to give the final table settings. The best way to get the correct settings will probably be to get them from PEQ once they are all done.

For now, you can either set AAs in SoF to go to separate tabs by editing the table yourself, or you can run the SQL in this post to replace your table with one that has some updates for SoF, including dividing some up to different tabs as well as removing all of the unknown DB string messages in the AA window:

http://www.eqemulator.net/forums/sho...5&postcount=22

If you want to update your table manually because you have custom AAs, you can do that too. The important settings are in the sof_type field, which decides which tab to put the AA in, and also in the clientver field, which decides which clients should show that particular AA.

blackdragonsdg 06-23-2009 06:22 PM

Thanks for the update Trevius. I knew aa's were being worked on I just did not expect to see some of the problems that showed up. Having aa's duplicate into two seperate rows once you train them and everything showing as max level value of one was really really weird.


All times are GMT -4. The time now is 01:39 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.