Make the main typesetting method reentrant.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@15913 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Alexander Malmberg 2003-02-09 13:53:35 +00:00
parent 63dcec6afa
commit 8c9dff945f
2 changed files with 24 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2003-02-09 14:48 Alexander Malmberg <alexander@malmberg.org>
* Source/GSHorizontalTypesetter.m: Make the main method reentrant
by having it allocate a temporary instance to handle calls when
it is already in use.
2003-02-09 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSColorList.m

View file

@ -62,6 +62,7 @@ cache fairly aggressively without having to worry about memory consumption.
free(cache);
cache = NULL;
}
DESTROY(lock);
[super dealloc];
}
@ -896,7 +897,23 @@ restart:
int ret = 0;
BOOL newParagraph;
[lock lock];
if (![lock tryLock])
{
/* Since we might be the shared system typesetter, we must be
reentrant. Thus, if we are already in use and can't lock our lock,
we create a new instance and let it handle the call. */
GSHorizontalTypesetter *temp;
temp = [[isa alloc] init];
ret = [temp layoutGlyphsInLayoutManager: layoutManager
inTextContainer: textContainer
startingAtGlyphIndex: glyphIndex
previousLineFragmentRect: previousLineFragRect
nextGlyphIndex: nextGlyphIndex
numberOfLineFragments: howMany];
DESTROY(temp);
return ret;
}
NS_DURING
curLayoutManager = layoutManager;