Changeset 250

Show
Ignore:
Timestamp:
07/18/06 15:50:44 (2 years ago)
Author:
jordi
Message:

When a new file is loaded, the page cache is emptied to prevent showing pages from previous files. See bug #43.

Part of this fix is thanks to LoneFox?.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/IDocument.cxx

    r222 r250  
    277277IDocument::notifyLoad () 
    278278{ 
     279    // Empty the cache to avoid displaying pages from previous file. 
     280    clearCache (); 
    279281    // Add the two first pages, if they exists, to the cache. 
    280282    addPageToCache (1); 
     
    723725{ 
    724726    if ( NULL == m_Format ) 
    725     {         
     727    { 
    726728        return ""; 
    727729    } 
     
    13661368        job->setPageNumber (pageNum); 
    13671369        IJob::enqueue (job); 
    1368          
     1370 
    13691371        G_LOCK (pageSearch); 
    13701372        // Check which cached page to drop. 
     
    14171419    G_LOCK (pageSearch); 
    14181420    PageCache *cached = NULL; 
    1419     for ( GList *page = g_list_first (m_PageCache) ;  
     1421    for ( GList *page = g_list_first (m_PageCache) ; 
    14201422          NULL != page && NULL == cached ; 
    14211423          page = g_list_next (page) ) 
     
    14431445    gint pageCount = g_list_length (m_PageCache); 
    14441446    guint32 minAge = G_MAXUINT32; 
    1445     for ( GList *page = g_list_first (m_PageCache) ;  
     1447    for ( GList *page = g_list_first (m_PageCache) ; 
    14461448          NULL != page ; 
    14471449          page = g_list_next (page) ) 
     
    14761478IDocument::clearCache () 
    14771479{ 
     1480    G_LOCK (pageSearch); 
    14781481    // Delete all cached pages. 
    1479     for ( GList *page = g_list_first (m_PageCache) ;  
     1482    for ( GList *page = g_list_first (m_PageCache) ; 
    14801483          NULL != page ; 
    14811484          page = g_list_next (page) ) 
    14821485    { 
    14831486        PageCache *cachedPage = (PageCache *)page->data; 
     1487        G_LOCK (pageImage); 
    14841488        delete cachedPage->pageImage; 
     1489        G_UNLOCK (pageImage); 
    14851490        delete cachedPage; 
    14861491    } 
    14871492    g_list_free (m_PageCache); 
     1493    m_PageCache = NULL; 
     1494    G_UNLOCK (pageSearch); 
    14881495} 
    14891496