0005414: Crash in SourceView. LRU clear does not reset first and last pointers
svn: r18579
This commit is contained in:
		
							
								
								
									
										24
									
								
								src/Lru.py
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/Lru.py
									
									
									
									
									
								
							@@ -155,7 +155,25 @@ class LRU(object):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        Empties LRU
 | 
					        Empties LRU
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        for obj, node in self.data.iteritems():
 | 
					        # Step through the doubly linked list, setting prev and next to None.
 | 
				
			||||||
            node.prev = None
 | 
					        # This ensures that each node is unreachable and therefore eligible for
 | 
				
			||||||
            node.next = None
 | 
					        # garbage collection. "del" is also called for each node, but it is
 | 
				
			||||||
 | 
					        # unclear whether this actually has any effect, of just removes the
 | 
				
			||||||
 | 
					        # binding to nobj
 | 
				
			||||||
 | 
					        nobj = self.first
 | 
				
			||||||
 | 
					        # The references first and last are removed so that the nodes are not
 | 
				
			||||||
 | 
					        # reachable from these
 | 
				
			||||||
 | 
					        self.first = None
 | 
				
			||||||
 | 
					        self.last = None
 | 
				
			||||||
 | 
					        # The references from self.data are removed
 | 
				
			||||||
        self.data.clear()
 | 
					        self.data.clear()
 | 
				
			||||||
 | 
					        while nobj is not None and nobj.next is not None:
 | 
				
			||||||
 | 
					            # each node except the last is processed
 | 
				
			||||||
 | 
					            nobj.next.prev = None
 | 
				
			||||||
 | 
					            nextobj = nobj.next
 | 
				
			||||||
 | 
					            nobj.next = None
 | 
				
			||||||
 | 
					            del nobj
 | 
				
			||||||
 | 
					            nobj = nextobj
 | 
				
			||||||
 | 
					        if nobj is not None:
 | 
				
			||||||
 | 
					            # The last node is processed
 | 
				
			||||||
 | 
					            del nobj
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user