[prev in list] [next in list] [prev in thread] [next in thread]
List: haiku-commits
Subject: [haiku-commits] r34384 - haiku/trunk/src/kits/storage/disk_device
From: ingo_weinhold () gmx ! de
Date: 2009-11-30 16:33:41
Message-ID: 20091130163341.96FFF682D3 () vmsvn ! haiku-os ! org
[Download RAW message or body]
Author: bonefish
Date: 2009-11-30 17:33:41 +0100 (Mon, 30 Nov 2009)
New Revision: 34384
Changeset: http://dev.haiku-os.org/changeset/34384/haiku
Modified:
haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.cpp
haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.h
Log:
Use pthread_once() to guard the singleton initialization.
Modified: haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.cpp
===================================================================
--- haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.cpp 2009-11-30 \
16:26:10 UTC (rev 34383)
+++ haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.cpp 2009-11-30 \
16:33:41 UTC (rev 34384) @@ -1,5 +1,5 @@
/*
- * Copyright 2007, Ingo Weinhold, bonefish@users.sf.net.
+ * Copyright 2007-2009, Ingo Weinhold, bonefish@users.sf.net.
* Distributed under the terms of the MIT License.
*/
@@ -17,7 +17,6 @@
#include <image.h>
#include <Path.h>
-#include <AppMisc.h>
#include <AutoDeleter.h>
#include <AutoLocker.h>
@@ -32,7 +31,7 @@
using std::nothrow;
-// sManager
+static pthread_once_t sManagerInitOnce = PTHREAD_ONCE_INIT;
DiskSystemAddOnManager* DiskSystemAddOnManager::sManager = NULL;
@@ -78,23 +77,9 @@
DiskSystemAddOnManager*
DiskSystemAddOnManager::Default()
{
- if (!sManager) {
- DiskSystemAddOnManager* manager = new DiskSystemAddOnManager();
+ if (sManager == NULL)
+ pthread_once(&sManagerInitOnce, &_InitSingleton);
- BPrivate::gInitializationLock.Lock();
-
- // set manager, if no one beat us to it
- if (!sManager) {
- sManager = manager;
- manager = NULL;
- }
-
- BPrivate::gInitializationLock.Unlock();
-
- // delete the object we created, if someone else was quicker
- delete manager;
- }
-
return sManager;
}
@@ -238,6 +223,13 @@
}
+/*static*/ void
+DiskSystemAddOnManager::_InitSingleton()
+{
+ sManager = new DiskSystemAddOnManager();
+}
+
+
// _AddOnAt
DiskSystemAddOnManager::AddOn*
DiskSystemAddOnManager::_AddOnAt(int32 index) const
@@ -369,4 +361,3 @@
return B_OK;
}
-
Modified: haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.h
===================================================================
--- haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.h 2009-11-30 \
16:26:10 UTC (rev 34383)
+++ haiku/trunk/src/kits/storage/disk_device/DiskSystemAddOnManager.h 2009-11-30 \
16:33:41 UTC (rev 34384) @@ -42,6 +42,8 @@
DiskSystemAddOnManager();
+ static void _InitSingleton();
+
AddOn* _AddOnAt(int32 index) const;
void _PutAddOn(int32 index);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic