投稿者 トピック: [r5718] 地下の電力線の撤去後にクラッシュする  (参照数 6079 回)

z9999+

  • 管理人
  • 急行
  • *
  • 投稿: 381
地下の電力線を2つ以上隣接して設置した場合、の撤去後にクラッシュする場合がある

再現手順:
1.添付したセーブゲームを開く
2.撤去ツールで入り口をクリックして撤去する
3.残った4つの入り口をすべて撤去する
4.電力線トンネルがあった場所をクリックして、再び電力線トンネルを建設する

結果:
クラッシュする


If you build more than 2 powerline tunnel side by side, it may be crash after removed them.

How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Select 'powerline tunnel' and click on slope tile to build powerline tunnel.

Result:
Crash.



コード: [選択]
5718d.exe caused an Access Violation at location 7c9501b3 in module ntdll.dll Writing to location 00664d26.

Registers:
eax=00664d0c ebx=03d90000 ecx=00000014 edx=01fc005a esi=00664d28 edi=00664d20
eip=7c9501b3 esp=0023e6ac ebp=0023e8cc iopl=0         nv up ei pl nz ac po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000216

Call stack:
7C9501B3  ntdll.dll:7C9501B3  RtlAllocateHeap
77BDC3C9  msvcrt.dll:77BDC3C9  free
77BDC3E7  msvcrt.dll:77BDC3E7  free
77BDC42E  msvcrt.dll:77BDC42E  malloc
00621DB7  5718d.exe:00621DB7
0045C280  5718d.exe:0045C280  leitung_t::laden_abschliessen()  leitung2.cc:338
...
{
verbinde();
> calc_neighbourhood();
grund_t *gr = welt->lookup(get_pos());
assert(gr);
...

0040E0FE  5718d.exe:0040E0FE  tunnelbauer_t::baue_tunnel(karte_t*, spieler_t*, koord3d, koord3d, koord, tunnel_besch_t const*)  tunnelbauer.cc:367
...
lt->laden_abschliessen();
}
> tunnel->obj_add(new tunnel_t(welt, pos, sp, besch));
tunnel->calc_bild();
tunnel->set_flag(grund_t::dirty);
...

0040DD65  5718d.exe:0040DD65  tunnelbauer_t::baue(karte_t*, spieler_t*, koord, tunnel_besch_t const*, bool)  tunnelbauer.cc:310
...

// Anfang und ende sind geprueft, wir konnen endlich bauen
> if(!baue_tunnel(welt, sp, gr->get_pos(), end, zv, besch)) {
return "Ways not connected";
}
...

005513D5  5718d.exe:005513D5  wkz_tunnelbau_t::do_work(karte_t*, spieler_t*, koord3d const&, koord3d const&)  simwerkz.cc:2198
...
if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) {
const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
> return tunnelbauer_t::baue( welt, sp, start.get_2d(), besch, !is_ctrl_pressed() );
}
else {
...

00541F1A  5718d.exe:00541F1A  two_click_werkzeug_t::work(karte_t*, spieler_t*, koord3d)  simmenu.cc:977
...
// Work here directly.
DBG_MESSAGE("two_click_werkzeug_t::work", "Call tool at %s", pos.get_str() );
> error = do_work( welt, sp, pos, koord3d::invalid );
}
else {
...

0057CCF0  5718d.exe:0057CCF0  karte_t::interactive_event(event_t&)  simworld.cc:5672
...
// do the work
wkz->flags |= werkzeug_t::WFL_LOCAL;
> err = wkz->work( this, get_active_player(), zeiger->get_pos() );
}
else {
...

0057E61D  5718d.exe:0057E61D  karte_t::interactive(unsigned)  simworld.cc:6144
...
}

> DBG_DEBUG4("karte_t::interactive", "point of loop return");
} while(!finish_loop  &&  get_current_month()<quit_month);

...

0053E4D5  5718d.exe:0053E4D5  simu_main(int, char**)  simmain.cc:1096
...
welt->interactive(quit_month);

> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...

00546372  5718d.exe:00546372  sysmain(int, char**)  simsys.cc:665
005A7A58  5718d.exe:005A7A58  WinMain@16  simsys_w.cc:703
006232DB  5718d.exe:006232DB  getc  stdio.h:377
...
    ?  (int) (unsigned char) *__F->_ptr++
    : _filbuf (__F);
> }

__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...

004010FB  5718d.exe:004010FB


If you don't have power tunnel tool in menu, try to build 2 road tunnels.

How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Select 'road tunnel' and click on slope tile to build road tunnel.
5. Build one moer road tunnel next to it.

Result:
Crash.



コード: [選択]
5718d.exe caused an Access Violation at location 7c9501b3 in module ntdll.dll Writing to location 00664a86.

Registers:
eax=00664a08 ebx=03d90000 ecx=00000018 edx=01ff005b esi=00664a88 edi=00664a80
eip=7c9501b3 esp=0023e66c ebp=0023e88c iopl=0         nv up ei pl nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000212

Call stack:
7C9501B3  ntdll.dll:7C9501B3  RtlAllocateHeap
77BDC3C9  msvcrt.dll:77BDC3C9  free
77BDC3E7  msvcrt.dll:77BDC3E7  free
77BDC42E  msvcrt.dll:77BDC42E  malloc
00621DB7  5718d.exe:00621DB7
0040DEA2  5718d.exe:0040DEA2  tunnelbauer_t::baue_tunnel(karte_t*, spieler_t*, koord3d, koord3d, koord, tunnel_besch_t const*)  tunnelbauer.cc:338
...
baue_einfahrt(welt, sp, pos, zv, besch, weg_besch, cost);

> ribi = ribi_typ(-zv);
// don't move on to next tile if only one tile long
if(  end != start  ) {
...

0040DD65  5718d.exe:0040DD65  tunnelbauer_t::baue(karte_t*, spieler_t*, koord, tunnel_besch_t const*, bool)  tunnelbauer.cc:310
...

// Anfang und ende sind geprueft, wir konnen endlich bauen
> if(!baue_tunnel(welt, sp, gr->get_pos(), end, zv, besch)) {
return "Ways not connected";
}
...

005513D5  5718d.exe:005513D5  wkz_tunnelbau_t::do_work(karte_t*, spieler_t*, koord3d const&, koord3d const&)  simwerkz.cc:2198
...
if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) {
const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
> return tunnelbauer_t::baue( welt, sp, start.get_2d(), besch, !is_ctrl_pressed() );
}
else {
...

00541F1A  5718d.exe:00541F1A  two_click_werkzeug_t::work(karte_t*, spieler_t*, koord3d)  simmenu.cc:977
...
// Work here directly.
DBG_MESSAGE("two_click_werkzeug_t::work", "Call tool at %s", pos.get_str() );
> error = do_work( welt, sp, pos, koord3d::invalid );
}
else {
...

0057CCF0  5718d.exe:0057CCF0  karte_t::interactive_event(event_t&)  simworld.cc:5672
...
// do the work
wkz->flags |= werkzeug_t::WFL_LOCAL;
> err = wkz->work( this, get_active_player(), zeiger->get_pos() );
}
else {
...

0057E61D  5718d.exe:0057E61D  karte_t::interactive(unsigned)  simworld.cc:6144
...
}

> DBG_DEBUG4("karte_t::interactive", "point of loop return");
} while(!finish_loop  &&  get_current_month()<quit_month);

...

0053E4D5  5718d.exe:0053E4D5  simu_main(int, char**)  simmain.cc:1096
...
welt->interactive(quit_month);

> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...

00546372  5718d.exe:00546372  sysmain(int, char**)  simsys.cc:665
005A7A58  5718d.exe:005A7A58  WinMain@16  simsys_w.cc:703
006232DB  5718d.exe:006232DB  getc  stdio.h:377
...
    ?  (int) (unsigned char) *__F->_ptr++
    : _filbuf (__F);
> }

__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...

004010FB  5718d.exe:004010FB


Saving this game also cause crash.

How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Save this game.

Result:
Crash.


コード: [選択]
5718d.exe caused an Access Violation at location 0728dbb8 Writing to location 0728dbb8.

Registers:
eax=0728dbb8 ebx=000001ab ecx=77bdc2e3 edx=0728dbb8 esi=00000074 edi=00000000
eip=0728dbb8 esp=0023ea3c ebp=0023ea78 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206

Call stack:
0728DBB8
004BA7F2  5718d.exe:004BA7F2  loadsave_frame_t::~loadsave_frame_t()  loadsave_frame.cc:216
...
}
file.close();
> }

...

004BA86F  5718d.exe:004BA86F  loadsave_frame_t::~loadsave_frame_t()  loadsave_frame.cc:216
...
}
file.close();
> }

...

00561602  5718d.exe:00561602  _ZL18destroy_framed_winP8simwin_t  simwin.cc:682
...
delete wins->gui;
}
> windows_dirty = true;
}

...

0056143D  5718d.exe:0056143D  _ZL17process_kill_listv  simwin.cc:636
...
static void process_kill_list()
{
> FOR(vector_tpl<simwin_t>, & i, kill_list) {
wins.remove(i);
destroy_framed_win(&i);
...

00563047  5718d.exe:00563047  check_pos_win(event_t*)  simwin.cc:1161
...
inside_event_handling = NULL;
process_kill_list();
> return swallowed;
}

...

0057D698  5718d.exe:0057D698  karte_t::interactive(unsigned)  simworld.cc:5884
...

DBG_DEBUG4("karte_t::interactive", "calling check_pos_win");
> swallowed = check_pos_win(&ev);

if(  !swallowed  ) {
...

0053E4D5  5718d.exe:0053E4D5  simu_main(int, char**)  simmain.cc:1096
...
welt->interactive(quit_month);

> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...

00546372  5718d.exe:00546372  sysmain(int, char**)  simsys.cc:665
005A7A58  5718d.exe:005A7A58  WinMain@16  simsys_w.cc:703
006232DB  5718d.exe:006232DB  getc  stdio.h:377
...
    ?  (int) (unsigned char) *__F->_ptr++
    : _filbuf (__F);
> }

__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...

004010FB  5718d.exe:004010FB

« 最終編集: 2012/05/16 16:28 by z9999+ »

prissi

  • 各駅停車
  • *
  • 投稿: 45
I think those are related to missing cleanup of poswerline tunnels in the other thread.

z9999+

  • 管理人
  • 急行
  • *
  • 投稿: 381
Tested in r5726.
This problem is NOT solved yet.
Still cause crash.

prissi

  • 各駅停車
  • *
  • 投稿: 45
I could not reproduce it.