From 870ae24a6d68de7030d14bad8f9a33521337ce3b Mon Sep 17 00:00:00 2001 From: Oliver Ruiz Dorantes Date: Wed, 16 Jul 2008 19:04:53 +0000 Subject: [PATCH] Resolve allocation of multiple Messengers,(Mika Lindqvist) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26449 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/bluetooth/DiscoveryAgent.h | 27 ++++++++++++++------------- src/kits/bluetooth/DiscoveryAgent.cpp | 26 ++++++++++++++++---------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/headers/os/bluetooth/DiscoveryAgent.h b/headers/os/bluetooth/DiscoveryAgent.h index a7b0a11e74..dd368e33c7 100644 --- a/headers/os/bluetooth/DiscoveryAgent.h +++ b/headers/os/bluetooth/DiscoveryAgent.h @@ -31,38 +31,39 @@ class RemoteDevice; class DiscoveryAgent { public: - + static const int GIAC = BT_GIAC; static const int LIAC = BT_LIAC; - + static const int PREKNOWN = BT_PREKNOWN; static const int CACHED = BT_CACHED; static const int NOT_DISCOVERABLE = BT_NOT_DISCOVERABLE; - + RemoteDevicesList RetrieveDevices(int option); /* TODO */ status_t StartInquiry(int accessCode, DiscoveryListener* listener); /* Throwing */ status_t StartInquiry(uint32 accessCode, DiscoveryListener* listener, bigtime_t secs); status_t CancelInquiry(DiscoveryListener* listener); - + /* int searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice btDev, DiscoveryListener discListener); - - bool cancelServiceSearch(int transID); + + bool cancelServiceSearch(int transID); BString selectService(UUID uuid, int security, boolean master); */ - + private: - DiscoveryAgent(LocalDevice* ld); - void SetLocalDeviceOwner(LocalDevice* ld); + DiscoveryAgent(LocalDevice* ld); + ~DiscoveryAgent(); + void SetLocalDeviceOwner(LocalDevice* ld); - DiscoveryListener* fLastUsedListener; - LocalDevice* fLocalDevice; - - friend class LocalDevice; + DiscoveryListener* fLastUsedListener; + LocalDevice* fLocalDevice; + BMessenger* fMessenger; + friend class LocalDevice; }; } diff --git a/src/kits/bluetooth/DiscoveryAgent.cpp b/src/kits/bluetooth/DiscoveryAgent.cpp index fc2c8e27e2..d2abbe59fe 100644 --- a/src/kits/bluetooth/DiscoveryAgent.cpp +++ b/src/kits/bluetooth/DiscoveryAgent.cpp @@ -43,10 +43,9 @@ DiscoveryAgent::StartInquiry(int accessCode, DiscoveryListener* listener) status_t DiscoveryAgent::StartInquiry(uint32 accessCode, DiscoveryListener* listener, bigtime_t secs) { - BMessenger* btsm = NULL; size_t size; - if ((btsm = _RetrieveBluetoothMessenger()) == NULL) + if (fMessenger == NULL) return B_ERROR; if (secs < 1 || secs > 61 ) @@ -81,7 +80,7 @@ DiscoveryAgent::StartInquiry(uint32 accessCode, DiscoveryListener* listener, big request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_COMPLETE); - if (btsm->SendMessage(&request, listener) == B_OK) + if (fMessenger->SendMessage(&request, listener) == B_OK) { return B_OK; } @@ -94,10 +93,9 @@ DiscoveryAgent::StartInquiry(uint32 accessCode, DiscoveryListener* listener, big status_t DiscoveryAgent::CancelInquiry(DiscoveryListener* listener) { - BMessenger* btsm = NULL; //TODO: this should be a member field size_t size; - if ((btsm = _RetrieveBluetoothMessenger()) == NULL) + if (fMessenger == NULL) return B_ERROR; void* cancelInquiryCommand = NULL; @@ -114,11 +112,11 @@ DiscoveryAgent::CancelInquiry(DiscoveryListener* listener) request.AddInt16("eventExpected", HCI_EVENT_CMD_STATUS); request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_LINK_CONTROL, OCF_INQUIRY_CANCEL)); - if (btsm->SendMessage(&request, &reply) == B_OK) { + if (fMessenger->SendMessage(&request, &reply) == B_OK) { if (reply.FindInt8("status", &bt_status ) == B_OK ) { - return bt_status; - } - } + return bt_status; + } + } return B_ERROR; } @@ -131,7 +129,15 @@ DiscoveryAgent::SetLocalDeviceOwner(LocalDevice* ld) DiscoveryAgent::DiscoveryAgent(LocalDevice* ld) { - fLocalDevice = ld; + fLocalDevice = ld; + fMessenger = _RetrieveBluetoothMessenger(); +} + + +DiscoveryAgent::~DiscoveryAgent() +{ + if (fMessenger) + delete fMessenger; }