freetype-devel
[Top][All Lists]
Advanced

[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:45:16 -0400 (EDT)

I myself use the UNIX cvs tools, and I do a cvs update on a frequent basis.  But
you can grab a daily cvs snapshot here:

    ftp://ftp.freetype.org/pub/unstable/freetype-current.tar.gz

You can also get the latest stable code base (2.0.2) here:

    ftp://ftp.freetype.org/pub/freetype2/ft202.zip

Tom

On Fri, 6 Apr 2001, Mike Owens wrote:

> Is 2.0.2 on the website?
>
> >>> Tom Kacvinsky <address@hidden> 04/06 4:38 PM >>>
> 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.
> > >
> >
> >
>
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]