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?