You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
969 B
Objective-C

#import "YSZone.h"
static YSZone *zone_list = 0;
static void *default_malloc(YSZone *zone, size_t size) {
void *mem;
mem = malloc(size);
if (mem != NULL) {
return mem;
}
//raise oom exception
return 0;
}
static void default_free(YSZone *zone, void *ptr) {
free(ptr);
}
static YSZone default_zone = {
default_malloc, default_free,
};
YSZone *YSDefaultMallocZone(void) {
return &default_zone;
}
YSZone *YSZoneFromPointer(void *ptr) {
YSZone *zone;
if (ptr == 0)
return 0;
if (zone_list == 0)
return &default_zone;
//mutex lock
for (zone = zone_list; zone != 0; zone = zone->next) {
if ( (zone->lookup)(zone, ptr) == 1 ) { break; }
}
//mutex unlock
return (zone == 0) ? &default_zone : zone;
}
void *YSZoneMalloc(YSZone *zone, YSUInteger size) {
if (!zone) {
zone = YSDefaultMallocZone();
}
return (zone->malloc)(zone, size);
}