[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Devel] Re: Cache manager FREE problem [was: Anyone there?]
From: |
Tom Kacvinsky |
Subject: |
[Devel] Re: Cache manager FREE problem [was: Anyone there?] |
Date: |
Fri, 6 Apr 2001 16:38:48 -0400 (EDT) |
I am using the current cvs code (post 2.0.2) . I was wondering what the
differences
were. :)
Tom
On Fri, 6 Apr 2001, Mike Owens wrote:
> Your code is not the same as mine in either module. I have freetype 2.0.1. Is
> this the latest version?
>
> >>> Tom Kacvinsky <address@hidden> 04/06 4:23 PM >>>
> Hi!
>
> I am confused here...
>
> In ftlru.c, we have this:
>
> FT_EXPORT_DEF( void ) FT_Lru_Done( FT_Lru lru )
> {
> FT_Memory memory;
>
>
> if ( !lru )
> return;
>
> memory = lru->memory;
>
> FT_Lru_Reset( lru );
>
> FREE( lru->nodes );
> FREE( lru );
> }
>
> So the lru->nodes are freed before lru is freed.
>
> In ftcmanag.c, we have this:
>
> FT_EXPORT_DEF( void ) FTC_Manager_Done( FTC_Manager manager )
> {
> FT_Memory memory;
> FT_UInt index;
>
>
> if ( !manager || !manager->library )
> return;
>
> memory = manager->library->memory;
>
> /* now discard all caches */
> for (index = 0; index < FTC_MAX_CACHES; index++ )
> {
> FTC_Cache cache = manager->caches[index];
>
>
> if ( cache )
> {
> cache->clazz->done_cache( cache );
> FREE( cache );
> manager->caches[index] = 0;
> }
> }
>
> /* discard faces and sizes */
> FT_Lru_Done( manager->faces_lru );
> manager->faces_lru = 0;
>
> FT_Lru_Done( manager->sizes_lru );
> manager->sizes_lru = 0;
>
> FREE( manager );
> }
>
> So I don't see how lru->nodes is freed twice, or how lru->nodes is not freed
> before lru is freed. So I would need to know which FREE is causing the memory
> access violation.
>
> I am CC'ing my response to the list, where this discussion is best kept. I
> mean, the more eyes on this, the better. :)
>
> Tom
>
> On Fri, 6 Apr 2001, Mike Owens wrote:
>
> > Thanks for your response. I just wasn't sure if my message was getting out
> > there.
> >
> > If this helps, I've traced into ftlru.c where FT_Lru_Done() gets called from
> > FTC_Manager_Done() (ftcmanage.c). FT_Lru_Done calls FT_Lru_Reset which seems
> > to be rearranging the nodes. However immediately following FT_Lru_Done is
> > FREE(lru) which frees the lru memory but not the lru->nodes.
> >
> > Thanks again for your response.
> >
> > > We are getting the messages. As I have said in the past, David Turner
> > > (the
> > > coder responsible for the cache manager) is a busy man, but he will
> > > eventually
> > > will get around to answering your email. :)
> > >
> > > But in meantime, it sounds like you have stumbled across a dangling
> > > pointer
> > > problem. The structure is getting freed before all of its consituent
> > > members
> > > are freed.
> > >
> > > I will try to cook up a patch, but it will most likely take me some time
> > > because I am not familiar with the cache manage code. I spend most of my
> > > time
> > > in the CFF, CID and Type 1 drivers.
> >
>
>
- [Devel] Re: Cache manager FREE problem [was: Anyone there?],
Tom Kacvinsky <=