Author: bonefish Date: 2010-02-24 20:04:41 +0100 (Wed, 24 Feb 2010) New Revision: 35608 Changeset: http://dev.haiku-os.org/changeset/35608/haiku Modified: haiku/trunk/headers/private/kernel/slab/ObjectDepot.h haiku/trunk/src/system/kernel/slab/ObjectDepot.cpp haiku/trunk/src/system/kernel/slab/Slab.cpp Log: Changed object_depot_store() return value to void. It is now always takes over ownership of the object. Fixes double free introduced in r35605. Modified: haiku/trunk/headers/private/kernel/slab/ObjectDepot.h =================================================================== --- haiku/trunk/headers/private/kernel/slab/ObjectDepot.h 2010-02-24 18:54:59 UTC (rev 35607) +++ haiku/trunk/headers/private/kernel/slab/ObjectDepot.h 2010-02-24 19:04:41 UTC (rev 35608) @@ -41,7 +41,7 @@ void object_depot_destroy(object_depot* depot, uint32 flags); void* object_depot_obtain(object_depot* depot); -int object_depot_store(object_depot* depot, void* object, uint32 flags); +void object_depot_store(object_depot* depot, void* object, uint32 flags); void object_depot_make_empty(object_depot* depot, uint32 flags); Modified: haiku/trunk/src/system/kernel/slab/ObjectDepot.cpp =================================================================== --- haiku/trunk/src/system/kernel/slab/ObjectDepot.cpp 2010-02-24 18:54:59 UTC (rev 35607) +++ haiku/trunk/src/system/kernel/slab/ObjectDepot.cpp 2010-02-24 19:04:41 UTC (rev 35608) @@ -249,7 +249,7 @@ } -int +void object_depot_store(object_depot* depot, void* object, uint32 flags) { DepotMagazine* freeMagazine = NULL; @@ -266,7 +266,7 @@ while (true) { if (store->loaded != NULL && store->loaded->Push(object)) - return 1; + return; if ((store->previous != NULL && store->previous->IsEmpty()) || exchange_with_empty(depot, store->previous, freeMagazine)) { @@ -292,7 +292,7 @@ DepotMagazine* magazine = alloc_magazine(depot, flags); if (magazine == NULL) { depot->return_object(depot, depot->cookie, object, flags); - return 0; + return; } readLocker.Lock(); Modified: haiku/trunk/src/system/kernel/slab/Slab.cpp =================================================================== --- haiku/trunk/src/system/kernel/slab/Slab.cpp 2010-02-24 18:54:59 UTC (rev 35607) +++ haiku/trunk/src/system/kernel/slab/Slab.cpp 2010-02-24 19:04:41 UTC (rev 35608) @@ -696,8 +696,8 @@ T(Free(cache, object)); if (!(cache->flags & CACHE_NO_DEPOT)) { - if (object_depot_store(&cache->depot, object, flags)) - return; + object_depot_store(&cache->depot, object, flags); + return; } MutexLocker _(cache->lock);