View Issue Details

IDProjectCategoryView StatusLast Update
0000643LDMud 3.3Runtimepublic2012-08-12 20:21
Reporterfufu Assigned Tofufu  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionunable to reproduce 
Platformx86OSLinuxOS Version2.6.25.20
Product Version3.3.718 
Summary0000643: ldmud loses reference counts to null_vector
DescriptionI've tracked down the last crash of Wunderland to an attempt of freeing the empty array (null_vector in array.c). I've since logged the reference count of the null_vector and it seems to be decreasing at a rate of about 1000 per day.

I have a log which shows that the reference count indeed drops below zero. (I've cheated and increased the reference count using gdb, to prevent the crash.)

I'm not sure where to go from here - there's very little information to go on. I have not been able to produce wrong reference counts in a test mud at home.
Additional Informationwe're currently running SVN r2517 + the ipv6 bandaid patch of 0000616, with the wunderland settings. (notable: swapping enabled)

As far as I can see, there are no new patches which would affect this reference count, but I may have missed something.

Wunderland never does any garbage collections (which would correct the reference count and probably avoid the crash).

To read out the null_vector refcount of the running mud, I'm using

gdb /mud/bin/driver $(pidof driver) -ex 'print null_vector.ref' --batch | sed -nr 's/.* = //p'
TagsNo tags attached.

Activities

fufu

2009-05-28 09:05

manager   ~0001172

Here's a backtrace of the crash:

(gdb) where full
#0 _free_vector (p=0x8117248) at array.c:306
        i = 0
        svp = <value optimized out>
0000001 0x0807e600 in free_array (a=0x8117248) at array.h:136
No locals.
0000002 0x0807f6de in free_svalue (v=0x898b580) at interpret.c:1348
        needs_deserializing = <value optimized out>
0000003 0x080dd68c in handle_newly_destructed_objects () at simulate.c:2881
No locals.
0000004 0x080539ad in backend () at backend.c:403
        buff = "who -k\0"...
        prevent_object_cleanup = false
0000005 0x080a6170 in main (argc=7, argv=0xbf9d8e34) at main.c:635
        i = 5
        set = {__val = {8192, 0 <repeats 31 times>}}
        rc = 0

(gdb) print &null_vector
$9 = (vector_t *) 0x8117248

The freed vector, 0x8117248, is null_vector, whose reference count
should never drop to 0.


This is a SuSE distribution;
glibc 2.8 (20080425)
gcc (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]

(I can't rule out the possibility that the compiler has miscompiled something)

fufu

2012-08-12 20:21

manager   ~0002149

This behavious has disappeared after moving to a new machine. Possible causes include hardware and compiler bugs. --> closing.

Issue History

Date Modified Username Field Change
2009-05-28 08:44 fufu New Issue
2009-05-28 09:05 fufu Note Added: 0001172
2009-06-01 05:38 zesstra Project LDMud => LDMud 3.3
2012-08-12 20:21 fufu Note Added: 0002149
2012-08-12 20:21 fufu Status new => closed
2012-08-12 20:21 fufu Assigned To => fufu
2012-08-12 20:21 fufu Resolution open => unable to reproduce