Replaced the locking strategy (formerly a recursive lock for the depot and

one for each per CPU store):
* The depot is now protected by a R/W lock combined with a spinlock. It is
  required to either hold read lock + spinlock or just the write lock.
* When accessing the per CPU stores we only need to acquire the read lock
  and disable interrupts. When switching magazines with the depot we
  additionally get the spinlock.
* When allocating a new magazine we do completely unlock.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35200 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2010-01-20 13:00:57 +00:00
parent 030a4ea6c9
commit 453a2bdd18
2 changed files with 126 additions and 96 deletions
+2 -1
View File
@@ -13,7 +13,8 @@
struct DepotMagazine;
typedef struct object_depot {
recursive_lock lock;
rw_lock outer_lock;
spinlock inner_lock;
DepotMagazine* full;
DepotMagazine* empty;
size_t full_count;