Author: axeld Date: 2009-10-12 16:29:05 +0200 (Mon, 12 Oct 2009) New Revision: 33548 Changeset: http://dev.haiku-os.org/changeset/33548/haiku Removed: haiku/trunk/headers/private/kernel/disk_device_manager/RWLocker.h haiku/trunk/src/system/kernel/disk_device_manager/Locker.cpp haiku/trunk/src/system/kernel/disk_device_manager/Locker.h haiku/trunk/src/system/kernel/disk_device_manager/RWLocker.cpp Modified: haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDevice.h haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h haiku/trunk/src/system/kernel/disk_device_manager/Jamfile haiku/trunk/src/system/kernel/disk_device_manager/KDiskDevice.cpp haiku/trunk/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp haiku/trunk/src/system/kernel/disk_device_manager/disk_device_manager.cpp haiku/trunk/src/system/kernel/messaging/MessagingService.cpp haiku/trunk/src/system/kernel/messaging/MessagingService.h Log: * Got rid of the duplicated functionalities provided by RWLocker.cpp, and Locker.cpp. * The services are now using recursive_locks, and rw_locks instead. Modified: haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDevice.h =================================================================== --- haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDevice.h 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDevice.h 2009-10-12 14:29:05 UTC (rev 33548) @@ -5,10 +5,12 @@ #ifndef _K_DISK_DEVICE_H #define _K_DISK_DEVICE_H + #include <OS.h> +#include <lock.h> + #include "KPartition.h" -#include "RWLocker.h" namespace BPrivate { @@ -36,10 +38,8 @@ // manager lock owners can be sure, that it won't change. bool ReadLock(); void ReadUnlock(); - bool IsReadLocked(bool orWriteLocked = true); bool WriteLock(); void WriteUnlock(); - bool IsWriteLocked(); virtual void SetID(partition_id id); @@ -92,7 +92,7 @@ void _UpdateDeviceFlags(); disk_device_data fDeviceData; - RWLocker fLocker; + rw_lock fLocker; int fFD; status_t fMediaStatus; }; Modified: haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h =================================================================== --- haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h 2009-10-12 14:29:05 UTC (rev 33548) @@ -133,7 +133,7 @@ void _NotifyDeviceEvent(KDiskDevice* device, int32 event, uint32 mask); - BLocker fLock; + recursive_lock fLock; DeviceMap *fDevices; PartitionMap *fPartitions; DiskSystemMap *fDiskSystems; Modified: haiku/trunk/src/system/kernel/disk_device_manager/Jamfile =================================================================== --- haiku/trunk/src/system/kernel/disk_device_manager/Jamfile 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/disk_device_manager/Jamfile 2009-10-12 14:29:05 UTC (rev 33548) @@ -27,10 +27,6 @@ KPartitionVisitor.cpp UserDataWriter.cpp - # utilities - Locker.cpp - RWLocker.cpp - # disk device types DiskDeviceTypes.cpp Modified: haiku/trunk/src/system/kernel/disk_device_manager/KDiskDevice.cpp =================================================================== --- haiku/trunk/src/system/kernel/disk_device_manager/KDiskDevice.cpp 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/disk_device_manager/KDiskDevice.cpp 2009-10-12 14:29:05 UTC (rev 33548) @@ -23,26 +23,27 @@ #define DBG(x) x #define OUT dprintf -// constructor + KDiskDevice::KDiskDevice(partition_id id) - : KPartition(id), - fDeviceData(), - fLocker("diskdevice"), - fFD(-1), - fMediaStatus(B_ERROR) + : + KPartition(id), + fDeviceData(), + fLocker(RW_LOCK_INITIALIZER("disk device")), + fFD(-1), + fMediaStatus(B_ERROR) { Unset(); fDevice = this; fPublishedName = (char*)"raw"; } -// destructor + KDiskDevice::~KDiskDevice() { Unset(); } -// SetTo + status_t KDiskDevice::SetTo(const char *path) { @@ -84,7 +85,7 @@ return B_OK; } -// Unset + void KDiskDevice::Unset() { @@ -102,57 +103,42 @@ _ResetGeometry(); } -// InitCheck + status_t KDiskDevice::InitCheck() const { - return fLocker.InitCheck(); + return B_OK; } -// ReadLock + bool KDiskDevice::ReadLock() { - return fLocker.ReadLock(); + return rw_lock_read_lock(&fLocker) == B_OK; } -// ReadUnlock + void KDiskDevice::ReadUnlock() { - fLocker.ReadUnlock(); + rw_lock_read_unlock(&fLocker); } -// IsReadLocked -bool -KDiskDevice::IsReadLocked(bool orWriteLocked) -{ - return fLocker.IsReadLocked(orWriteLocked); -} -// WriteLock bool KDiskDevice::WriteLock() { - return fLocker.WriteLock(); + return rw_lock_write_lock(&fLocker) == B_OK; } -// WriteUnlock + void KDiskDevice::WriteUnlock() { - fLocker.WriteUnlock(); + rw_lock_write_unlock(&fLocker); } -// IsWriteLocked -bool -KDiskDevice::IsWriteLocked() -{ - return fLocker.IsWriteLocked(); -} - -// SetID void KDiskDevice::SetID(partition_id id) { @@ -160,7 +146,7 @@ fDeviceData.id = id; } -// PublishDevice + status_t KDiskDevice::PublishDevice() { Modified: haiku/trunk/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp =================================================================== --- haiku/trunk/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/disk_device_manager/KDiskDeviceManager.cpp 2009-10-12 14:29:05 UTC (rev 33548) @@ -239,7 +239,7 @@ KDiskDeviceManager::KDiskDeviceManager() : - fLock("disk device manager"), + fLock(RECURSIVE_LOCK_INITIALIZER("disk device manager")), fDevices(new(nothrow) DeviceMap), fPartitions(new(nothrow) PartitionMap), fDiskSystems(new(nothrow) DiskSystemMap), @@ -324,7 +324,7 @@ || fObsoletePartitions == NULL || fNotifications == NULL) return B_NO_MEMORY; - return fLock.Sem() >= 0 ? B_OK : fLock.Sem(); + return B_OK; } @@ -366,14 +366,14 @@ bool KDiskDeviceManager::Lock() { - return fLock.Lock(); + return recursive_lock_lock(&fLock) == B_OK; } void KDiskDeviceManager::Unlock() { - fLock.Unlock(); + recursive_lock_unlock(&fLock); } Modified: haiku/trunk/src/system/kernel/disk_device_manager/disk_device_manager.cpp =================================================================== --- haiku/trunk/src/system/kernel/disk_device_manager/disk_device_manager.cpp 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/disk_device_manager/disk_device_manager.cpp 2009-10-12 14:29:05 UTC (rev 33548) @@ -39,12 +39,10 @@ { KDiskDeviceManager* manager = KDiskDeviceManager::Default(); if (KDiskDevice* device = manager->RegisterDevice(partitionID, false)) { - bool isLocked = device->IsWriteLocked(); - if (isLocked) { - device->WriteUnlock(); - device->Unregister(); - } + device->WriteUnlock(); device->Unregister(); + + device->Unregister(); } } @@ -71,12 +69,10 @@ { KDiskDeviceManager* manager = KDiskDeviceManager::Default(); if (KDiskDevice* device = manager->RegisterDevice(partitionID, false)) { - bool isLocked = device->IsReadLocked(false); - if (isLocked) { - device->ReadUnlock(); - device->Unregister(); - } + device->ReadUnlock(); device->Unregister(); + + device->Unregister(); } } Modified: haiku/trunk/src/system/kernel/messaging/MessagingService.cpp =================================================================== --- haiku/trunk/src/system/kernel/messaging/MessagingService.cpp 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/messaging/MessagingService.cpp 2009-10-12 14:29:05 UTC (rev 33548) @@ -1,10 +1,12 @@ -/* +/* * Copyright 2005-2008, Ingo Weinhold, ingo_weinhold@xxxxxxx * Distributed under the terms of the MIT License. */ -// kernel-side implementation of the messaging service +//! kernel-side implementation of the messaging service + + #include <new> #include <AutoDeleter.h> @@ -33,13 +35,11 @@ // #pragma mark - MessagingArea -// constructor MessagingArea::MessagingArea() { } -// destructor MessagingArea::~MessagingArea() { if (fID >= 0) @@ -47,7 +47,6 @@ } -// Create MessagingArea * MessagingArea::Create(sem_id lockSem, sem_id counterSem) { @@ -76,7 +75,6 @@ } -// InitHeader void MessagingArea::InitHeader() { @@ -90,7 +88,6 @@ } -// CheckCommandSize bool MessagingArea::CheckCommandSize(int32 dataSize) { @@ -101,7 +98,6 @@ } -// Lock bool MessagingArea::Lock() { @@ -113,7 +109,6 @@ } -// Unlock void MessagingArea::Unlock() { @@ -122,7 +117,6 @@ } -// ID area_id MessagingArea::ID() const { @@ -130,7 +124,6 @@ } -// Size int32 MessagingArea::Size() const { @@ -138,7 +131,6 @@ } -// Empty bool MessagingArea::IsEmpty() const { @@ -146,7 +138,6 @@ } -// AllocateCommand void * MessagingArea::AllocateCommand(uint32 commandWhat, int32 dataSize, bool &wasEmpty) @@ -218,7 +209,6 @@ } -// CommitCommand void MessagingArea::CommitCommand() { @@ -227,7 +217,6 @@ } -// SetNextArea void MessagingArea::SetNextArea(MessagingArea *area) { @@ -236,7 +225,6 @@ } -// NextArea MessagingArea * MessagingArea::NextArea() const { @@ -244,7 +232,6 @@ } -// _CheckCommand messaging_command * MessagingArea::_CheckCommand(int32 offset, int32 &size) { @@ -271,16 +258,15 @@ // #pragma mark - MessagingService -// constructor MessagingService::MessagingService() - : fLock("messaging service"), - fFirstArea(NULL), - fLastArea(NULL) + : + fLock(RECURSIVE_LOCK_INITIALIZER("messaging service")), + fFirstArea(NULL), + fLastArea(NULL) { } -// destructor MessagingService::~MessagingService() { // Should actually never be called. Once created the service stays till the @@ -288,33 +274,27 @@ } -// InitCheck status_t MessagingService::InitCheck() const { - if (fLock.Sem() < 0) - return fLock.Sem(); return B_OK; } -// Lock bool MessagingService::Lock() { - return fLock.Lock(); + return recursive_lock_lock(&fLock) == B_OK; } -// Unlock void MessagingService::Unlock() { - fLock.Unlock(); + recursive_lock_unlock(&fLock); } -// RegisterService status_t MessagingService::RegisterService(sem_id lockSem, sem_id counterSem, area_id &areaID) @@ -362,7 +342,6 @@ } -// UnregisterService status_t MessagingService::UnregisterService() { @@ -392,7 +371,6 @@ } -// SendMessage status_t MessagingService::SendMessage(const void *message, int32 messageSize, const messaging_target *targets, int32 targetCount) @@ -436,7 +414,6 @@ } -// _AllocateCommand status_t MessagingService::_AllocateCommand(int32 commandWhat, int32 size, MessagingArea *&area, void *&data, bool &wasEmpty) @@ -513,7 +490,6 @@ // #pragma mark - kernel private -// send_message status_t send_message(const void *message, int32 messageSize, const messaging_target *targets, int32 targetCount) @@ -534,7 +510,6 @@ } -// send_message status_t send_message(const KMessage *message, const messaging_target *targets, int32 targetCount) @@ -547,7 +522,6 @@ } -// init_messaging_service status_t init_messaging_service() { @@ -573,7 +547,6 @@ // #pragma mark - syscalls -// _user_register_messaging_service /** \brief Called by the userland server to register itself as a messaging service for the kernel. \param lockingSem A semaphore used for locking the shared data. Semaphore @@ -605,7 +578,6 @@ } -// _user_unregister_messaging_service status_t _user_unregister_messaging_service() { Modified: haiku/trunk/src/system/kernel/messaging/MessagingService.h =================================================================== --- haiku/trunk/src/system/kernel/messaging/MessagingService.h 2009-10-12 14:27:02 UTC (rev 33547) +++ haiku/trunk/src/system/kernel/messaging/MessagingService.h 2009-10-12 14:29:05 UTC (rev 33548) @@ -1,17 +1,19 @@ -/* +/* * Copyright 2005, Ingo Weinhold, bonefish@xxxxxxxxxxxxx All rights reserved. * Distributed under the terms of the MIT License. */ - -// kernel-side implementation-private definitions for the messaging service - #ifndef MESSAGING_SERVICE_H #define MESSAGING_SERVICE_H + +//! kernel-side implementation-private definitions for the messaging service + + #include <MessagingServiceDefs.h> -#include "Locker.h" +#include <lock.h> + namespace BPrivate { // MessagingArea @@ -73,7 +75,7 @@ status_t _AllocateCommand(int32 commandWhat, int32 size, MessagingArea *&area, void *&data, bool &wasEmpty); - BLocker fLock; + recursive_lock fLock; team_id fServerTeam; sem_id fLockSem; sem_id fCounterSem;