lucy-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marvin Humphrey <mar...@rectangular.com>
Subject Re: double free
Date Mon, 25 Jan 2010 04:42:42 GMT
On Sun, Jan 24, 2010 at 10:27:15PM -0600, Peter Karman wrote:
> I will try and reduce the size of the doc collection in question to see if 
> I can make a reproducable test case.

Hold up a sec...

That might be a little tricky, since it's almost certainly tied to flushing of
sorted runs.  If you drop below the threshold where runs get flushed, you may
not see the problem any more.

I see from this that the problem is a call to free() from within SortEx_destroy():

> #4  0x00000030caf691f6 in free () from /lib64/tls/libc.so.6
> #5  0x0000002a990eebc1 in kino_SortEx_destroy ()
>    from  /opt/pij/lib/perl5/site_perl/5.8.9/x86_64-linux/auto/KinoSearch/KinoSearch.so
> #6  0x0000002a99144656 in kino_Obj_dec_refcount ()
>    from  /opt/pij/lib/perl5/site_perl/5.8.9/x86_64-linux/auto/KinoSearch/KinoSearch.so
> #7  0x0000002a990f79e4 in kino_PostWriter_finish ()
>    from  /opt/pij/lib/perl5/site_perl/5.8.9/x86_64-linux/auto/KinoSearch/KinoSearch.so
> #8  0x0000002a99104657 in kino_SegWriter_finish ()

That's a little weird because all calls to free() should be wrapped by
Memory_wrapped_free().

SortEx_destroy isn't very long, though:

    void
    SortEx_destroy(SortExternal *self) 
    {
        FREEMEM(self->scratch);
        FREEMEM(self->slice_sizes);
        FREEMEM(self->slice_starts);
        if (self->cache) {
            SortEx_Clear_Cache(self);
            FREEMEM(self->cache);
        }
        DECREF(self->runs);
        SUPER_DESTROY(self, SORTEXTERNAL);
    }

We should try to hunt this down logically before spending too much time on
reproducing it.

Marvin


Mime
View raw message