[haiku-commits] r35608 - in haiku/trunk: headers/private/kernel/slab src/system/kernel/slab

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 24 Feb 2010 20:04:41 +0100 (CET)

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);


Other related posts:

  • » [haiku-commits] r35608 - in haiku/trunk: headers/private/kernel/slab src/system/kernel/slab - ingo_weinhold