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: Lexerbug in 3.2.4
Date: 981029
Type: Bug
State: Fixed
Author: Freaky
Long:

Lars Duening:
> Ja, jetzt muesste ich nur etwas mehr Freizeit haben, um auch wirklich
> regelmaessig dran arbeiten zu koennen :-)

*grins* ich kenne das Problem. Ich kann fuer UNItopia auch nicht mehr das
tun, was ich gerne tun wuerde.

> > Ist die Versionsnummer eigentlich mit Amylaar abgesprochen?
> > Nicht dass es irgendwann zwei Driver mit derselben Versions-Nummer gibt.
>
> Noe, weswegen ich das Teil ja auch 'LDMud' genannt habe. Aber das
> Amylaar nochmal selber einen Patch herausgibt ist sehr unwahrscheinlich.

Alles klar.

> Danke fuer den Patch!

No Prob.

Allerdings habe ich ein Problem, bei dem ich nicht weiss, woran es liegt:
Der Driver crashed ab und zu:

#1  0x80608ee in yylex1 () at lex.c:1775
#2  0x805bb8b in yylex () at lex.c:1812
#3  0x804e7ee in yyparse () at y.tab.c:4866
#4  0x804e4ad in compile_file () at prolang.y:6940
#5  0x8083aff in load_object (
    lname=0xbf81fff8 "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:419
#6  0x8083c7e in load_object (
    lname=0xbf82018c "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:454
#7  0x8083c7e in load_object (
    lname=0xbf820320 "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:454
#8  0x8083c7e in load_object (
    lname=0xbf8204b4 "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:454
#9  0x8083c7e in load_object (
    lname=0xbf820648 "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:454
#10 0x8083c7e in load_object (
    lname=0xbf8207dc "z/Raetsel/Hackbart/d/Kokosinsel/room/gang1",
    dont_reset=0, depth=60) at simulate.c:454
.... (so geht das immer weiter)

Er findet anscheinend das Objekt nicht im Object-Hash-Table und verhaspelt
sich irgendwann. Ich weiss nur nicht, wie man das repariert.
In deinem Changelog steht was drin, dass du den object-namen vorher
neu zusammensetzt. Wenn ich das obige Objekt von Hand lade, crashed der
Driver nicht, es muss also schon vorher einen Fehler im Hash-Table gegeben
haben. Leider kenne ich mich mit den Internas des Drivers nicht gut genug
aus, um einen Hash-Table zu debuggen.
Vielleicht findest du den Fehler...

Ciao
		Freaky

--
Frank 'Freaky' Kirschner
UNItopia Admin                          http://UNItopia.uni-stuttgart.de/
Freaky@UNItopia.Uni-Stuttgart.DE      telnet://UNItopia.uni-stuttgart.de/


From: Freaky <Freaky@UNItopia.rus.uni-stuttgart.de>
Date: Thu, 29 Oct 1998 16:48:07 +0100
X-Mailer: Mutt 0.94.10i

Hi,

Lars Duening:
> > Lars Duning:
> > > Ein paar Fragen hab ich doch noch. Ich wuerde gerne den Anfang
> > > des Callstacks sehen, also die obersten Frames bis hin zum
> > > Anfang der (fast)Endlosrekursion.
> >
> > Leider ist das Core unserem naechlichen Aufraeum-Crin zum Opfer gefallen :(
>
> Hab ich schon befuerchtet, aber ich wollte wenigstens gefragt haben.

Ok.. ich habe es nochmal geschafft:

Mudadm ~/orbit/lib > gdb ~/magyra/bin/driver-3.2.4.01 core
GNU gdb 4.17
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...

warning: core file may not match specified executable file.
Core was generated by `/UNItopia/mudadm/orbit/bin/driver -DUNItopia -DTestMUD -DOrbit -E300000 -DMESSA'.
Program terminated with signal 11, Segmentation fault.
find_solib: Can't read pathname for load map: Input/output error

#0  0x805d034 in _expand_define (p=0x9c87a4c) at lex.c:2404
2404                add_input(p->exps.str);
(gdb) bt
#0  0x805d034 in _expand_define (p=0x9c87a4c) at lex.c:2404
#1  0x80608ee in yylex1 () at lex.c:1775
#2  0x805bb8b in yylex () at lex.c:1812
#3  0x804e7ee in yyparse () at y.tab.c:4866
#4  0x804e4ad in compile_file () at prolang.y:6940
#5  0x8083aff in load_object (
    lname=0xbf81fff8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:419
#6  0x8083c7e in load_object (
    lname=0xbf820188 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#7  0x8083c7e in load_object (
    lname=0xbf820318 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#8  0x8083c7e in load_object (
    lname=0xbf8204a8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#9  0x8083c7e in load_object (
    lname=0xbf820638 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#10 0x8083c7e in load_object (
    lname=0xbf8207c8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
[...]
(gdb) list
2399            lexerror("Too many macro expansions");
2400            return 0;
2401        }
2402        if (p->nargs == -1) {
2403            if (!p->special) {
2404                add_input(p->exps.str);
2405            } else {
2406                e = (*p->exps.fun)();
2407                if (!e) {
2408                    lexerror("Out of memory");
(gdb) up
#1  0x80608ee in yylex1 () at lex.c:1775
1775                    _expand_define(&p->u.define);
(gdb) list
1770                printf("ident type is %d\n",p->type);
1771    #endif
1772                switch(p->type) {
1773                  case I_TYPE_DEFINE:
1774                    outp=yyp;
1775                    _expand_define(&p->u.define);
1776                    if (lex_fatal) {
1777                        return -1;
1778                    }
1779                    yyp=outp;
(gdb) up
#2  0x805bb8b in yylex () at lex.c:1812
1812        r = yylex1();
(gdb) list
1807        int r;
1808
1809    #ifdef LEXDEBUG
1810        yytext[0] = 0;
1811    #endif
1812        r = yylex1();
1813    #ifdef LEXDEBUG
1814        fprintf(stderr, "lex=%d(%s) ", r, yytext);
1815    #endif
1816        return r;
(gdb) up
#3  0x804e7ee in yyparse () at y.tab.c:4866
y.tab.c:4866: No such file or directory.
(gdb) list
y.tab.c:4861: No such file or directory.
(gdb) up
#4  0x804e4ad in compile_file () at prolang.y:6940
6940        yyparse();
(gdb) list
6935    /*
6936     * Compile an LPC file.
6937     */
6938    void compile_file() {
6939        prolog();
6940        yyparse();
6941        epilog();
6942    }
6943
6944    static char *get_two_types(type1, type2)
(gdb) up
#5  0x8083aff in load_object (
    lname=0xbf81fff8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:419
419         compile_file();
(gdb) list
414         /* The file name is needed before start_new_file(), in case there is
415          * an initial line too long error.
416          */
417         start_new_file(fd);
418         name[name_length] = '\0';
419         compile_file();
420         end_new_file();
421         if (comp_flag)
422             fprintf(stderr, " done\n");
423         update_compile_av(total_lines);
(gdb) up
#6  0x8083c7e in load_object (
    lname=0xbf820188 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
454                 ob = load_object(name, dont_reset, depth);
(gdb) list
449             free_string(inter_sp->u.string);
450             inter_sp--;
451             if (!ob || ob->flags & O_DESTRUCTED)
452                 error("Inheritance failed\n");
453             if ( !(ob = lookup_object_hash(name)) )
454                 ob = load_object(name, dont_reset, depth);
455             return ob;
456         }
457         if (num_parse_error > 0) {
458             error("Error in loading object\n");
[...]

Was brauchst du sonst noch?

Ciao
		Freaky

--
Frank 'Freaky' Kirschner
UNItopia Admin                          http://UNItopia.uni-stuttgart.de/
Freaky@UNItopia.Uni-Stuttgart.DE      telnet://UNItopia.uni-stuttgart.de/

Subject: Re: Noch ein Bug
From: Freaky <Freaky@UNItopia.rus.uni-stuttgart.de>
Date: Fri, 30 Oct 1998 14:01:52 +0100
X-Mailer: Mutt 0.94.10i

Hi,

Lars Duening:
> > Lars Duening:
> > > > Ok.. ich habe es nochmal geschafft:
> > >
> > > Was ich jetzt noch gerne wissen wuerde, ist, wie Anfang des Callstacks
> > > aussieht (in gdb die Frames mit den hohen Nummern), also bis hin zum
> > > dritten Aufruf von load_object("d/Doerrland..."). Eventuell in diesen
> > > drei load_object()-Aufrufen noch alle lokalen Variablen, die dir
> > > interessant erscheinen.
> >
> > Wie kann ich die callstacks in den Frames anzeigen?
>
> Alle Frames zusammen bilden den Callstack, und ich will einfach nur das
> andere Ende dieses Stacks sehen. Klar jetzt?

Ich bin bisher noch nie an das Ende gestossen ;)

#20625 0x8083c7e in load_object (
    lname=0xbfffdab8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#20626 0x8083c7e in load_object (
    lname=0xbfffdc48 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#20627 0x8083c7e in load_object (
    lname=0xbfffddd8 "d/Doerrland/Sarasande/bambule/bad/araum", dont_reset=0,
    depth=60) at simulate.c:454
#20628 0x8083c7e in load_object (
    lname=0x9d4ef71 "d/Doerrland/Sarasande/bambule/bad/araum.c", dont_reset=0,
    depth=60) at simulate.c:454
#20629 0x8086ab4 in find_object (
    str=0x9d4ef71 "d/Doerrland/Sarasande/bambule/bad/araum.c")
    at simulate.c:1988
#20630 0x806dbb0 in eval_instruction (
    first_instruction=0x8de6ff3 "JyDSJz\037", sp=0x80e2578) at interpret.c:5929
#20631 0x807c6a9 in apply_low (fun=0x8e1c8fa "loading", ob=0x8bc4c8c,
    num_arg=1) at interpret.c:10185
#20632 0x807ca9c in sapply (fun=0x8e1c8fa "loading", ob=0x8bc4c8c, num_arg=1)
    at interpret.c:10351
#20633 0x807cb0a in apply (fun=0x8e1c8fa "loading", ob=0x8bc4c8c, num_arg=1)
    at interpret.c:10370
#20634 0x80ae33c in process_value (
    str=0x9d52150 "loading:/w/freaky/obj/tobj|/d/Doerrland/Sarasande/bambule/bad/araum.c") at parse.c:1902
#20635 0x80ae1a1 in process_part (
    str=0x9d52150 "loading:/w/freaky/obj/tobj|/d/Doerrland/Sarasande/bambule/bad
/araum.c") at parse.c:1836
#20636 0x80adf88 in process_string (
    str=0x9d60410 "@@loading:/w/freaky/obj/tobj|/d/Doerrland/Sarasande/bambule/bad/araum.c@@") at parse.c:1765
#20637 0x80720ad in eval_instruction (first_instruction=0x8645a5b ",",
    sp=0x80e2520) at interpret.c:7171
#20638 0x807c6a9 in apply_low (fun=0x879cafa "f_find", ob=0x8ddb03c, num_arg=8)
    at interpret.c:10185
#20639 0x807ca9c in sapply (fun=0x879cafa "f_find", ob=0x8ddb03c, num_arg=8)
    at interpret.c:10351
#20640 0x80ab70e in call_out () at call_out.c:402
#20641 0x808e31e in call_heart_beat () at backend.c:789
#20642 0x808dca7 in backend () at backend.c:482
#20643 0x8061404 in main (argc=24, argv=0xbffffa08) at main.c:313

Das process_string ist von Meinem Objekt, das einfach successive alle
Objekte laedt (ein iterativer find in LPC der fuer jedes File einen
String auswertet und per process_string ausfuehrt)

/w/freaky/obj/tobj:
string loading(string str)
{
    string tt;

    tell_object(find_player("freaky"),sprintf("loading '%s'\n",str));
    tt = catch(call_other(str,"???"));
    if (tt)
        tell_object(find_player("freaky"),sprintf("Fehler bei %s: %s",str,tt));
    return "";
}

Ciao
		Freaky

--
Frank 'Freaky' Kirschner
UNItopia Admin                          http://UNItopia.uni-stuttgart.de/
Freaky@UNItopia.Uni-Stuttgart.DE      telnet://UNItopia.uni-stuttgart.de/