diff --git a/ChangeLog b/ChangeLog index e7dede994..5054fa603 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-06-05 Wolfgang Lux + + * Source/GSLayoutManager.m (-dealloc): Set layout manager of every + text container to nil to avoid dangling pointer in case the text + container is retained elsewhere. + + * Source/NSTextStorage.m (-dealloc): Set text storage of every + layout manager to nil to avoid dangling pointer in case the layout + manager is retained elsewhere. + 2012-06-03 Wolfgang Lux * Source/NSTextView.m (-performUndo): Update text storage directly diff --git a/Source/GSLayoutManager.m b/Source/GSLayoutManager.m index 4329d3ecf..bc9ac0586 100644 --- a/Source/GSLayoutManager.m +++ b/Source/GSLayoutManager.m @@ -2918,6 +2918,7 @@ forStartOfGlyphRange: (NSRange)glyphRange [self _freeLayout]; for (i = 0, tc = textcontainers; i < num_textcontainers; i++, tc++) { + [tc->textContainer setLayoutManager: nil]; [tc->textContainer release]; } free(textcontainers); diff --git a/Source/NSTextStorage.m b/Source/NSTextStorage.m index edfcf5894..7d041464f 100644 --- a/Source/NSTextStorage.m +++ b/Source/NSTextStorage.m @@ -61,6 +61,8 @@ static NSNotificationCenter *nc = nil; - (void) dealloc { [self setDelegate: nil]; + [_layoutManagers makeObjectsPerformSelector: @selector(setTextStorage:) + withObject: nil]; RELEASE (_layoutManagers); [super dealloc]; }