ldmud-3.2.9/doc/
ldmud-3.2.9/doc/efun/
ldmud-3.2.9/mud/
ldmud-3.2.9/mud/heaven7/
ldmud-3.2.9/mud/heaven7/lib/
ldmud-3.2.9/mud/lp-245/
ldmud-3.2.9/mud/lp-245/banish/
ldmud-3.2.9/mud/lp-245/doc/
ldmud-3.2.9/mud/lp-245/doc/examples/
ldmud-3.2.9/mud/lp-245/doc/sefun/
ldmud-3.2.9/mud/lp-245/log/
ldmud-3.2.9/mud/lp-245/obj/Go/
ldmud-3.2.9/mud/lp-245/players/lars/
ldmud-3.2.9/mud/lp-245/room/death/
ldmud-3.2.9/mud/lp-245/room/maze1/
ldmud-3.2.9/mud/lp-245/room/sub/
ldmud-3.2.9/mud/lp-245/secure/
ldmud-3.2.9/mud/morgengrauen/
ldmud-3.2.9/mud/morgengrauen/lib/
ldmud-3.2.9/mud/sticklib/
ldmud-3.2.9/mud/sticklib/src/
ldmud-3.2.9/mudlib/uni-crasher/
ldmud-3.2.9/pkg/
ldmud-3.2.9/pkg/debugger/
ldmud-3.2.9/pkg/diff/
ldmud-3.2.9/pkg/misc/
ldmud-3.2.9/src/autoconf/
ldmud-3.2.9/src/bugs/
ldmud-3.2.9/src/bugs/MudCompress/
ldmud-3.2.9/src/bugs/b-020916-files/
ldmud-3.2.9/src/bugs/doomdark/
ldmud-3.2.9/src/bugs/ferrycode/ferry/
ldmud-3.2.9/src/bugs/ferrycode/obj/
ldmud-3.2.9/src/bugs/psql/
ldmud-3.2.9/src/done/
ldmud-3.2.9/src/done/order_alist/
ldmud-3.2.9/src/done/order_alist/obj/
ldmud-3.2.9/src/done/order_alist/room/
ldmud-3.2.9/src/gcc/
ldmud-3.2.9/src/gcc/2.7.0/
ldmud-3.2.9/src/gcc/2.7.1/
ldmud-3.2.9/src/hosts/
ldmud-3.2.9/src/hosts/GnuWin32/
ldmud-3.2.9/src/hosts/amiga/NetIncl/
ldmud-3.2.9/src/hosts/amiga/NetIncl/netinet/
ldmud-3.2.9/src/hosts/amiga/NetIncl/sys/
ldmud-3.2.9/src/hosts/i386/
ldmud-3.2.9/src/hosts/msdos/byacc/
ldmud-3.2.9/src/hosts/msdos/doc/
ldmud-3.2.9/src/hosts/os2/
ldmud-3.2.9/src/hosts/win32/
ldmud-3.2.9/src/util/
ldmud-3.2.9/src/util/erq/
ldmud-3.2.9/src/util/indent/hosts/next/
ldmud-3.2.9/src/util/xerq/
ldmud-3.2.9/src/util/xerq/lpc/
ldmud-3.2.9/src/util/xerq/lpc/www/
Short: Crash in Inline Closures
Date: Tue, 26 Oct 1999 17:25:16 +0200
From: Andreas Weller <aw6@informatik.uni-ulm.de>
Type: Bug
State: Done - already fixed in 3.2.8-dev.144

Ich hatte nochmal nen Crasher bei Inline-Closures, der
vermutlich nicht mit dem andern zusammenhaengt:
---------------------------------
inherit "/std/thing"; /* or add to the test_master.c */

void init()
{
  add_action("crash","crash"); // direkt im create() hats 
                               // nicht gecrasht
}

int crash(string arg)
{
 object *anwesende;

 anwesende=users();  // ein Array muss beteiligt sein

 switch(arg)         // ausserdem ein switch 
 {
   case "XXX":
   default:
     (: :);          // mit einer closure drin
 }
 return 1;
}
----------------
crasht mit 
Program received signal SIGSEGV, Segmentation fault.
0x8088709 in _free_vector (p=0x0) at array.c:369
array.c:369: No such file or directory.
(gdb) bt
#0  0x8088709 in _free_vector (p=0x0) at array.c:369
#1  0x80e0cac in start_of_stack ()
#2  0x807bdd4 in apply_low (fun=0x0, ob=0x8287e62, num_arg=135922608,
    b_ign_prot=127) at interpret.c:18450

-----------------------------------

Der Crash trat auch mit dem test_master auf, allerdings
auf etwas ungewoehnliche Art. 

Ich hab als Attachments das Log vom gdb und das Log vom Telnet
angehaengt.

Erst beim 3. Aufruf des Befehls 'crash' (add_action auf
die bekannte Funktion) kommt es zum crash, das allerdings
bei mehreren Versuchen regelmaessig.
Aber schon beim 2.Versuch ist das Verhalten nicht mehr 
korrekt, die Funktion crash() macht ein return 0 statt
dem return 1 (last_instructions ab 819a6f1 im gdb_log).
Scheinbar wird da der Code selbst ueberschrieben, was
dann beim 3. Aufruf fatale Auswirkungen hat...

Tja, ich hoff mal das ganze ist nicht systemabhaengig
so dass Du es bei Dir auch hinkriegst.

Gruss, Andreas

--------------BE7772D3F0A7F9A9A11BF515
telnet.log:

ws02:~> telnet pk.mud.de 4242    
Trying 141.55.225.26...
Connected to uwhome.mpi.htwm.de.
Escape character is '^]'.
LDMud 3.2.7
---------
Sentences:                             1       20
Objects:                               2      184 (0 swapped, 0 Kbytes)
Arrays:                                0        0
Mappings:                              0        0
Prog blocks:                           1      764 (0 swapped, 0 Kbytes)
Memory reserved:                           950000
hash table overhead                         16384
Strings malloced                     376     6612 + 67792 overhead
call out:                              0        0 (current length 0)
Regexp cache:                          0        0 --------
Total:                                    1041756
----------
> crash
> crash
What?
> crash
Connection closed by foreign host.

--------------

gdb_log:

(gdb) r
Starting program: /u/mud/src/ldmud/ldmud-3.2.7/mudlib/driver -N -e -m.
-Mtest_master.c -s-1 -sv-1 4242
No simul_efun
Setting up ipc.
test_master: connect()
test_master#0: logon()
Illegal instruction
Current object was test_master#0
test_master#0 test_master.c line 78
819a604: 233          write                     (1)     line 78
819a605:  14        4 clit                      (0)     line 79
819a607:  12          const0                    (1)
819a608: 512      512 debug_info                (2)
819a60b: 233          write                     (1)
819a60c:   7        9 cstring0                  (0)     line 80
819a60e: 233          write                     (1)
819a60f: 133          enable_commands           (0)     line 81
819a610:   7       10 cstring0                  (0)     line 83
819a612:   7       11 cstring0                  (1)
819a614: 109        2 add_action                (2)
819a616:   7       12 cstring0                  (0)     line 84
819a618:   7        2 cstring0                  (1)
819a61a: 109        2 add_action                (2)
819a61c:   7       13 cstring0                  (0)     line 85
819a61e:   7       14 cstring0                  (1)
819a620: 109        2 add_action                (2)
819a622:   7       15 cstring0                  (0)     line 86
819a624:   7       16 cstring0                  (1)
819a626: 109        2 add_action                (2)
819a628:   7       17 cstring0                  (0)     line 87
819a62a:   7       18 cstring0                  (1)
819a62c: 109        2 add_action                (2)
819a62e:   7       19 cstring0                  (0)     line 88
819a630:   7       19 cstring0                  (1)
819a632: 109        2 add_action                (2)
819a634:  13          const1                    (0)     line 90
819a635:  19          return                    (1)
819a6db: 231          users                     (0)     line 173
819a6dc:  87        1 push_local_variable_lvalue (1)
819a6de:  35          (void)=                   (2)
819a6df:  24        0 local                     (0)     line 175
819a6e1:  22     1797 switch                    (1)
819a6e4:  17       13 closure                   (0)     line 179
819a6e7:  69          pop_value                 (1)
819a6e8:  21          break                     (0)     line 180
819a6f1:  13          const1                    (0)     line 181
819a6f2:  19          return                    (1)
819a6db: 231          users                     (0)     line 173
819a6dc:  87        1 push_local_variable_lvalue (1)
819a6de:  35          (void)=                   (2)
819a6df:  24        0 local                     (0)     line 175
819a6e1:  22     1797 switch                    (1)
819a6e4:  17       13 closure                   (0)     line 179
819a6e7:  69          pop_value                 (1)
819a6e8:  21          break                     (0)     line 180
819a6f1:  12          const0                    (0)     line 181
819a6f2:  19          return                    (1)
819a6db: 231          users                     (0)     line 173
819a6dc:  87        1 push_local_variable_lvalue (1)
819a6de:  35          (void)=                   (2)
19a6df:  24        0 local                     (0)     line 175
819a6e1:  22     1797 switch                    (1)
819a6e4:  17       13 closure                   (0)     line 179
819a6e7:  69          pop_value                 (1)
819a6e8:  21          break                     (0)     line 180
819a6f1:  11 -1219881965 number                    (0)  line 181
819a6f6:  25        8 catch                     (1)     line 183
819a6f8:   7        9 cstring0                  (1)
819a6fb:  20  20   0   0   0   8   0  12
'          crash' in '       test_master.c' ('       test_master#0')line 187
'          crash' in '       test_master.c' ('       test_master#0')line 183
Program received signal SIGSEGV, Segmentation fault.
fatal (fmt=0x80e8984 "е\031\b") at simulate.c:2571
2571        *((char*)0) = 0/0;
(gdb) bt
#0  fatal (fmt=0x80e8984 "е\031\b") at simulate.c:2571
#1  0x8 in ?? ()
#2  0x807b8f8 in apply_low (fun=Cannot access memory at address 0x35.
) at interpret.c:18348
Cannot access memory at address 0x1.

---------- Analysis ----------

Another example of the inline closure bug fixed in .144.
Under Cygwin it is sufficient to have the "crash()" lfun called from
the flag() apply - no interactive user needed.