EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Support::Linux Servers (https://www.eqemulator.org/forums/forumdisplay.php?f=588)
-   -   Perl crash when shutting down a zone (https://www.eqemulator.org/forums/showthread.php?t=36994)

PiB 06-22-2013 01:21 PM

Perl crash when shutting down a zone
 
Since I upgraded to Perl 5.18 from Perl 5.16, 'zone' is always crashing when shutting down a zone. Here is the backtrace:

Code:

#0  0x00007ffff7acae71 in Perl__invlist_intersection_maybe_complement_2nd () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#1  0x00007ffff7ad02aa in S_regclass () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#2  0x00007ffff7ad3eeb in S_regatom () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#3  0x00007ffff7ad60e4 in S_regbranch () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#4  0x00007ffff7acc684 in S_reg () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#5  0x00007ffff7ad3fe0 in S_regatom () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#6  0x00007ffff7ad60e4 in S_regbranch () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#7  0x00007ffff7acc684 in S_reg () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#8  0x00007ffff7ad3fe0 in S_regatom () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#9  0x00007ffff7ad60e4 in S_regbranch () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#10 0x00007ffff7acc684 in S_reg () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#11 0x00007ffff7adede5 in Perl_re_op_compile () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#12 0x00007ffff7a90c92 in Perl_pmruntime () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#13 0x00007ffff7ac1b5d in Perl_yyparse () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#14 0x00007ffff7b3cd72 in S_doeval () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#15 0x00007ffff7b4798c in Perl_pp_require () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#16 0x00007ffff7b04e26 in Perl_runops_standard () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#17 0x00007ffff7a963b0 in Perl_call_sv () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#18 0x00007ffff7a98477 in Perl_call_list () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#19 0x00007ffff7a7e48f in S_process_special_blocks () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#20 0x00007ffff7a8fa9c in Perl_newATTRSUB_flags () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#21 0x00007ffff7a905f0 in Perl_newATTRSUB () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#22 0x00007ffff7a92c29 in Perl_utilize () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#23 0x00007ffff7ac2255 in Perl_yyparse () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#24 0x00007ffff7b3cd72 in S_doeval () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#25 0x00007ffff7b48a14 in Perl_pp_entereval () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#26 0x00007ffff7a96b94 in Perl_eval_sv () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#27 0x00007ffff7a96cca in Perl_eval_pv () from /usr/lib64/perl5/core_perl/CORE/libperl.so
#28 0x0000000000705afe in Embperl::init_eval_file (this=0x184a700) at EQEmuServer/zone/embperl.cpp:293
#29 0x0000000000705760 in Embperl::DoInit (this=0x184a700) at EQEmuServer/zone/embperl.cpp:154
#30 0x0000000000705ac3 in Embperl::Reinit (this=0x184a700) at EQEmuServer/zone/embperl.cpp:265
#31 0x00000000006f9843 in PerlembParser::ReloadQuests (this=0x184c730, with_timers=true) at EQEmuServer/zone/embparser.cpp:902
#32 0x00000000008e0bff in QuestParserCollection::ReloadQuests (this=0x184c610, reset_timers=true) at EQEmuServer/zone/QuestParserCollection.cpp:47
#33 0x0000000000968e23 in Zone::Shutdown (quite=false) at EQEmuServer/zone/zone.cpp:882
#34 0x0000000000790a7c in main (argc=2, argv=0x7fffffffe2c8) at EQEmuServer/zone/net.cpp:418

Here is a short log of the zone:
Code:

[Status] Booting gfaydark (54:0)
[Debug] The next weather check for zone: gfaydark will be in 4262 seconds.
[Status] Loading spawn conditions...
[Status] Loading static zone points...
[Status] Loading spawn groups...
[Status] Loading spawn2 points...
[Status] Loading player corpses...
[Status] Loading traps...
[Status] Loading adventure flavor text...
[Status] Loading ground spawns...
[Status] Loading Ground Spawns from DB...
[Status] Loading World Objects from DB...
[Status] Loading Objects from DB...
[Status] Loading doors for gfaydark ...
[Status] Loading Doors from database...
[Status] Loading AA information...
[Status] Loading AA Effects...
[Status] Loaded 1051 AA Effects.
[Status] Loading Merchant Lists...
[Status] Loading Temporary Merchant Lists...
[Status] Successfully loaded Zone Config.
[Status] Loading timezone data...
[Status] Init Finished: ZoneID = 54, Time Offset = 0
Map header: 166645 faces, 4762 nodes, 257033 facelists
Loaded map: 499935 vertices, 166645 faces
Map BB: (-2693.16 -> 2766.28, -2803.81 -> 2751.75, -32777.73 -> 801.81)
Map ./Maps/gfaydark.map loaded.
Water region map has 5809 nodes.
Water Map ./Maps/gfaydark.wtr loaded.
[Error] Starting Log: logs/eqemu_error_zone_11772.log
[Error] Path File ./Maps/gfaydark.path not found.
[Debug] Zone: gfaydark has weather of type 1.
[Debug] Zone: gfaydark(54) has weather type = 1. The weather timer has been enabled.
[Normal] Starting Log: logs/eqemu_zone_11772.log
[Normal] ---- Zone server gfaydark, listening on port:7003 ----
[Status] Zone Bootup: gfaydark (54: 0)
Received Message SyncWorldTime
Time Broadcast Packet: EQTime [12:08 am]
[Debug] Character not in a group: Bound
Unable to get raid id, char not found!
[Quest] Unable to read perl file 'quests/gfaydark/player_v0.pl'
[Status] Zone Shutdown: gfaydark (54)
[Normal] Zone shutdown: going to sleep

It looks like something goes wrong when re-initializing the Perl interpreter. The first initialization goes fine which is interesting. With the following hack the problem goes away:

Code:

diff --git a/zone/embparser.cpp b/zone/embparser.cpp
index 535ce88..b6decf3 100644
--- a/zone/embparser.cpp
+++ b/zone/embparser.cpp
@@ -895,10 +895,11 @@ void PerlembParser::ReloadQuests(bool with_timers) {
        command_clear_perl();
 
        try {
-              if(perl == nullptr)
+        delete perl;
+              //if(perl == nullptr)
                        perl = new Embperl;
-              else
-                      perl->Reinit();
+              //else
+              //      perl->Reinit();
                map_funs();
        }
        catch(std::exception &e) {

Any idea what may be the issue here?

Kingly_Krab 06-22-2013 01:35 PM

I'm not sure if Perl 5.18 is supported, you may have to re-install 5.16.

Secrets 06-22-2013 03:01 PM

No idea, personally, but i'd be more than willing to get to the bottom of it, I get the same crash on Perl 5.14.3


All times are GMT -4. The time now is 04:01 AM.

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