[haiku-commits] r33548 - in haiku/trunk: headers/private/kernel/disk_device_manager src/system/kernel/disk_device_manager src/system/kernel/messaging

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 12 Oct 2009 16:29:05 +0200 (CEST)

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;


Other related posts:

  • » [haiku-commits] r33548 - in haiku/trunk: headers/private/kernel/disk_device_manager src/system/kernel/disk_device_manager src/system/kernel/messaging - axeld