We already panic to indicate that something's wrong, no real need to crash
afterwards instead of returning gracefully. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32293 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -417,8 +417,10 @@ static void *
|
|||||||
internal_alloc(size_t size, uint32 flags)
|
internal_alloc(size_t size, uint32 flags)
|
||||||
{
|
{
|
||||||
if (flags & CACHE_DURING_BOOT) {
|
if (flags & CACHE_DURING_BOOT) {
|
||||||
if ((sInitialPointer + size) > sInitialLimit)
|
if ((sInitialPointer + size) > sInitialLimit) {
|
||||||
panic("internal_alloc: ran out of initial space");
|
panic("internal_alloc: ran out of initial space");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
uint8 *buffer = sInitialPointer;
|
uint8 *buffer = sInitialPointer;
|
||||||
sInitialPointer += size;
|
sInitialPointer += size;
|
||||||
@@ -489,8 +491,10 @@ area_free_pages(object_cache *cache, void *pages)
|
|||||||
|
|
||||||
TRACE_CACHE(cache, "delete pages %p (%ld)", pages, id);
|
TRACE_CACHE(cache, "delete pages %p (%ld)", pages, id);
|
||||||
|
|
||||||
if (id < B_OK)
|
if (id < 0) {
|
||||||
panic("object cache: freeing unknown area");
|
panic("object cache: freeing unknown area");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
delete_area(id);
|
delete_area(id);
|
||||||
|
|
||||||
@@ -688,7 +692,7 @@ object_cache_commit_slab(object_cache *cache, slab *slab)
|
|||||||
{
|
{
|
||||||
void *pages = (void *)ROUNDDOWN((addr_t)slab->pages, B_PAGE_SIZE);
|
void *pages = (void *)ROUNDDOWN((addr_t)slab->pages, B_PAGE_SIZE);
|
||||||
if (create_area(cache->name, &pages, B_EXACT_ADDRESS, cache->slab_size,
|
if (create_area(cache->name, &pages, B_EXACT_ADDRESS, cache->slab_size,
|
||||||
B_ALREADY_WIRED, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA) < B_OK)
|
B_ALREADY_WIRED, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA) < 0)
|
||||||
panic("failed to create_area()");
|
panic("failed to create_area()");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -994,8 +998,10 @@ object_cache_alloc(object_cache *cache, uint32 flags)
|
|||||||
static void
|
static void
|
||||||
object_cache_return_to_slab(object_cache *cache, slab *source, void *object)
|
object_cache_return_to_slab(object_cache *cache, slab *source, void *object)
|
||||||
{
|
{
|
||||||
if (source == NULL)
|
if (source == NULL) {
|
||||||
panic("object_cache: free'd object has no slab");
|
panic("object_cache: free'd object has no slab");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ParanoiaChecker _(source);
|
ParanoiaChecker _(source);
|
||||||
|
|
||||||
@@ -1309,6 +1315,7 @@ HashedObjectCache::ObjectSlab(void *object) const
|
|||||||
if (link == NULL) {
|
if (link == NULL) {
|
||||||
panic("object cache: requested object %p missing from hash table",
|
panic("object cache: requested object %p missing from hash table",
|
||||||
object);
|
object);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
return link->parent;
|
return link->parent;
|
||||||
}
|
}
|
||||||
@@ -1333,10 +1340,15 @@ void
|
|||||||
HashedObjectCache::UnprepareObject(slab *source, void *object)
|
HashedObjectCache::UnprepareObject(slab *source, void *object)
|
||||||
{
|
{
|
||||||
Link *link = hash_table.Lookup(object);
|
Link *link = hash_table.Lookup(object);
|
||||||
if (link == NULL)
|
if (link == NULL) {
|
||||||
panic("object cache: requested object missing from hash table");
|
panic("object cache: requested object missing from hash table");
|
||||||
if (link->parent != source)
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (link->parent != source) {
|
||||||
panic("object cache: slab mismatch");
|
panic("object cache: slab mismatch");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
hash_table.Remove(link);
|
hash_table.Remove(link);
|
||||||
free_link(link);
|
free_link(link);
|
||||||
|
|||||||
Reference in New Issue
Block a user