mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-24 09:19:15 +00:00
Tweaks resulting from Fred's valgrind sesssions.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/branches/stable@26997 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
042f7a621d
commit
18912f117c
3 changed files with 24 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
2008-10-31 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Headers/Additions/GNUstepBase/GSIArray.h:
|
||||
Minor fixes for memory leak on exception etc.
|
||||
* Source/NSKeyedUnarchiver.m:
|
||||
Make sure array of objects is initialised with correct capacity.
|
||||
|
||||
2008-10-29 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSException.m: Fix stacktrace to be available when built
|
||||
|
|
|
@ -185,6 +185,7 @@ GSIArrayGrow(GSIArray array)
|
|||
if (array->old < 1)
|
||||
{
|
||||
array->old = 1;
|
||||
array->cap = 1;
|
||||
}
|
||||
next = array->cap + array->old;
|
||||
size = next*sizeof(GSIArrayItem);
|
||||
|
@ -220,7 +221,18 @@ GSIArrayGrowTo(GSIArray array, unsigned next)
|
|||
format: @"attempt to shrink below count"];
|
||||
}
|
||||
size = next*sizeof(GSIArrayItem);
|
||||
tmp = NSZoneRealloc(array->zone, array->ptr, size);
|
||||
if (array->old == 0)
|
||||
{
|
||||
/*
|
||||
* Statically initialised buffer ... copy into new heap buffer.
|
||||
*/
|
||||
tmp = NSZoneMalloc(array->zone, size);
|
||||
memcpy(tmp, array->ptr, array->count * sizeof(GSIArrayItem));
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = NSZoneRealloc(array->zone, array->ptr, size);
|
||||
}
|
||||
|
||||
if (tmp == 0)
|
||||
{
|
||||
|
@ -228,7 +240,7 @@ GSIArrayGrowTo(GSIArray array, unsigned next)
|
|||
format: @"failed to grow GSIArray"];
|
||||
}
|
||||
array->ptr = tmp;
|
||||
array->old = array->cap;
|
||||
array->old = (array->cap > 0 ? array->cap : 1);
|
||||
array->cap = next;
|
||||
}
|
||||
|
||||
|
@ -237,8 +249,8 @@ GSIArrayInsertItem(GSIArray array, GSIArrayItem item, unsigned index)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
GSI_ARRAY_RETAIN(array, item);
|
||||
GSI_ARRAY_CHECK;
|
||||
GSI_ARRAY_RETAIN(array, item);
|
||||
if (array->count == array->cap)
|
||||
{
|
||||
GSIArrayGrow(array);
|
||||
|
@ -272,8 +284,8 @@ GSIArrayInsertItemNoRetain(GSIArray array, GSIArrayItem item, unsigned index)
|
|||
static INLINE void
|
||||
GSIArrayAddItem(GSIArray array, GSIArrayItem item)
|
||||
{
|
||||
GSI_ARRAY_RETAIN(array, item);
|
||||
GSI_ARRAY_CHECK;
|
||||
GSI_ARRAY_RETAIN(array, item);
|
||||
if (array->count == array->cap)
|
||||
{
|
||||
GSIArrayGrow(array);
|
||||
|
|
|
@ -798,7 +798,7 @@ static NSMapTable globalClassMap = 0;
|
|||
NSNonOwnedPointerMapValueCallBacks, 0);
|
||||
_objMap = NSZoneMalloc(_zone, sizeof(GSIArray_t));
|
||||
count = [_objects count];
|
||||
GSIArrayInitWithZoneAndCapacity(_objMap, _zone, count);
|
||||
GSIArrayInitWithZoneAndCapacity(_objMap, _zone, count+1);
|
||||
// Add marker for nil object
|
||||
GSIArrayAddItem(_objMap, (GSIArrayItem)((id)[NilMarker class]));
|
||||
// Add markers for unencoded objects.
|
||||
|
|
Loading…
Reference in a new issue