From 41ba915d4209230c44208bc7480ea76532b984c9 Mon Sep 17 00:00:00 2001 From: beveloper Date: Sun, 24 Nov 2002 00:27:09 +0000 Subject: [PATCH] various small changes git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2071 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/media/Buffer.cpp | 2 +- src/kits/media/BufferGroup.cpp | 1 + src/kits/media/DormantNodeManager.cpp | 2 +- src/kits/media/MediaFormats.cpp | 2 +- src/kits/media/SharedBufferList.cpp | 3 +- src/kits/media/TimedEventQueuePrivate.cpp | 3 +- src/kits/media/TimedEventQueuePrivate.h | 2 +- src/servers/media/AppManager.cpp | 9 +++++- src/servers/media/BufferManager.cpp | 8 +++++- src/servers/media/BufferManager.h | 2 ++ src/servers/media/NodeManager.cpp | 34 +++++++++++++++++++++-- src/servers/media/NodeManager.h | 3 ++ src/servers/media/NotificationManager.cpp | 5 ++-- src/servers/media/Queue.cpp | 4 +-- src/servers/media/media_server.cpp | 3 +- 15 files changed, 67 insertions(+), 16 deletions(-) diff --git a/src/kits/media/Buffer.cpp b/src/kits/media/Buffer.cpp index 8e4e347878..fae4b397fa 100644 --- a/src/kits/media/Buffer.cpp +++ b/src/kits/media/Buffer.cpp @@ -70,7 +70,7 @@ void BBuffer::SetSizeUsed(size_t size_used) { CALLED(); - fMediaHeader.size_used = min_c(size_used,fSize); + fMediaHeader.size_used = min_c(size_used, fSize); } diff --git a/src/kits/media/BufferGroup.cpp b/src/kits/media/BufferGroup.cpp index 3a307c4f95..fd2061ebf3 100644 --- a/src/kits/media/BufferGroup.cpp +++ b/src/kits/media/BufferGroup.cpp @@ -17,6 +17,7 @@ status_t BBufferGroup::InitBufferGroup() { + CALLED(); area_id id; // some defaults diff --git a/src/kits/media/DormantNodeManager.cpp b/src/kits/media/DormantNodeManager.cpp index b7a8df4f01..be9738c631 100644 --- a/src/kits/media/DormantNodeManager.cpp +++ b/src/kits/media/DormantNodeManager.cpp @@ -41,7 +41,7 @@ namespace media { DormantNodeManager::DormantNodeManager() { - fLock = new BLocker(); + fLock = new BLocker("dormant node manager locker"); fAddonmap = new Map; } diff --git a/src/kits/media/MediaFormats.cpp b/src/kits/media/MediaFormats.cpp index c29272829c..6b51f93155 100644 --- a/src/kits/media/MediaFormats.cpp +++ b/src/kits/media/MediaFormats.cpp @@ -309,7 +309,7 @@ BMediaFormats::find_addons( int32 BMediaFormats::s_cleared; BMessenger BMediaFormats::s_server; BList BMediaFormats::s_formats; -BLocker BMediaFormats::s_lock; +BLocker BMediaFormats::s_lock("BMediaFormats locker"); /************************************************************* * diff --git a/src/kits/media/SharedBufferList.cpp b/src/kits/media/SharedBufferList.cpp index cd0f0077c5..6df32f6d8f 100644 --- a/src/kits/media/SharedBufferList.cpp +++ b/src/kits/media/SharedBufferList.cpp @@ -50,12 +50,13 @@ _shared_buffer_list::Clone(area_id id) //TRACE("cloned area, id = 0x%08lx, ptr = 0x%08x\n",status,(int)adr); } - return (status < B_OK) ? NULL : adr; + return (status < B_OK) ? NULL : adr; } void _shared_buffer_list::Unmap() { + CALLED(); // unmap the memory used by this struct // XXX is this save? area_id id; diff --git a/src/kits/media/TimedEventQueuePrivate.cpp b/src/kits/media/TimedEventQueuePrivate.cpp index 5419c4f684..5f5c1ee956 100644 --- a/src/kits/media/TimedEventQueuePrivate.cpp +++ b/src/kits/media/TimedEventQueuePrivate.cpp @@ -16,7 +16,7 @@ #include "debug.h" _event_queue_imp::_event_queue_imp() : - fLock("BTimedEventQueue locker"), + fLock(new BLocker("BTimedEventQueue locker")), fEventCount(0), fFirstEntry(NULL), fLastEntry(NULL), @@ -36,6 +36,7 @@ _event_queue_imp::~_event_queue_imp() entry = entry->next; delete deleteme; } + delete fLock; } diff --git a/src/kits/media/TimedEventQueuePrivate.h b/src/kits/media/TimedEventQueuePrivate.h index add3084e5c..53269662eb 100644 --- a/src/kits/media/TimedEventQueuePrivate.h +++ b/src/kits/media/TimedEventQueuePrivate.h @@ -67,7 +67,7 @@ private: event_queue_entry *GetEnd_BeforeTime(bigtime_t eventTime, bool inclusive); event_queue_entry *GetStart_AfterTime(bigtime_t eventTime, bool inclusive); - BLocker fLock; + BLocker * fLock; int32 fEventCount; event_queue_entry *fFirstEntry; event_queue_entry *fLastEntry; diff --git a/src/servers/media/AppManager.cpp b/src/servers/media/AppManager.cpp index a643391805..5f985b84d3 100644 --- a/src/servers/media/AppManager.cpp +++ b/src/servers/media/AppManager.cpp @@ -15,12 +15,16 @@ #include #include #include "AppManager.h" +#include "NodeManager.h" +#include "BufferManager.h" +#include "NotificationManager.h" +#include "media_server.h" AppManager::AppManager() : fAddonServer(-1) { fAppMap = new Map; - fLocker = new BLocker; + fLocker = new BLocker("app manager locker"); fQuit = create_sem(0, "big brother waits"); fBigBrother = spawn_thread(bigbrother, "big brother is watching you", B_NORMAL_PRIORITY, this); resume_thread(fBigBrother); @@ -174,6 +178,9 @@ void AppManager::CleanupTeam(team_id team) printf("AppManager: cleaning up team %ld\n", team); + gNodeManager->CleanupTeam(team); + gBufferManager->CleanupTeam(team); + gNotificationManager->CleanupTeam(team); } void AppManager::CleanupAddonServer() diff --git a/src/servers/media/BufferManager.cpp b/src/servers/media/BufferManager.cpp index edefbecd0c..12e9385e4f 100644 --- a/src/servers/media/BufferManager.cpp +++ b/src/servers/media/BufferManager.cpp @@ -1,4 +1,4 @@ -/* + /* * Copyright 2002, Marcus Overhagen. All rights reserved. * Distributed under the terms of the MIT License. */ @@ -134,6 +134,12 @@ BufferManager::UnregisterBuffer(team_id teamid, media_buffer_id bufferid) return B_ERROR; } +void +BufferManager::CleanupTeam(team_id teamid) +{ +} + + void BufferManager::PrintToStream() { diff --git a/src/servers/media/BufferManager.h b/src/servers/media/BufferManager.h index 6b6ec895fb..de5f6af53d 100644 --- a/src/servers/media/BufferManager.h +++ b/src/servers/media/BufferManager.h @@ -19,6 +19,8 @@ public: media_buffer_id *bufferid); status_t UnregisterBuffer(team_id teamid, media_buffer_id bufferid); + + void CleanupTeam(team_id teamid); void PrintToStream(); diff --git a/src/servers/media/NodeManager.cpp b/src/servers/media/NodeManager.cpp index cd07170403..5438afacb1 100644 --- a/src/servers/media/NodeManager.cpp +++ b/src/servers/media/NodeManager.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include #include #include @@ -13,12 +15,11 @@ #include "debug.h" #include "NodeManager.h" -// XXX locking is missing - NodeManager::NodeManager() : nextaddonid(1), nextnodeid(1) { + fLocker = new BLocker("node manager locker"); fDormantFlavorList = new List; fAddonPathMap = new Map; fRegisteredNodeMap = new Map; @@ -27,6 +28,7 @@ NodeManager::NodeManager() : NodeManager::~NodeManager() { + delete fLocker; delete fDormantFlavorList; delete fAddonPathMap; delete fRegisteredNodeMap; @@ -36,6 +38,7 @@ NodeManager::~NodeManager() status_t NodeManager::RegisterNode(media_node_id *nodeid, media_addon_id addon_id, int32 addon_flavor_id, const char *name, uint64 kinds, port_id port, team_id team) { + BAutolock lock(fLocker); bool b; registered_node rn; rn.nodeid = nextnodeid; @@ -60,6 +63,7 @@ NodeManager::RegisterNode(media_node_id *nodeid, media_addon_id addon_id, int32 status_t NodeManager::UnregisterNode(media_addon_id *addon_id, media_node_id nodeid, team_id team) { + BAutolock lock(fLocker); bool b; registered_node *rn; TRACE("NodeManager::UnregisterNode enter: node %ld, team %ld\n", nodeid, team); @@ -87,6 +91,7 @@ NodeManager::UnregisterNode(media_addon_id *addon_id, media_node_id nodeid, team status_t NodeManager::IncrementGlobalRefCount(media_node_id nodeid, team_id team) { + BAutolock lock(fLocker); registered_node *rn; bool b; TRACE("NodeManager::IncrementGlobalRefCount enter: node %ld, team %ld\n", nodeid, team); @@ -115,6 +120,7 @@ NodeManager::IncrementGlobalRefCount(media_node_id nodeid, team_id team) status_t NodeManager::DecrementGlobalRefCount(media_node_id nodeid, team_id team) { + BAutolock lock(fLocker); registered_node *rn; bool b; TRACE("NodeManager::DecrementGlobalRefCount enter: node %ld, team %ld\n", nodeid, team); @@ -144,6 +150,7 @@ NodeManager::DecrementGlobalRefCount(media_node_id nodeid, team_id team) status_t NodeManager::GetCloneForId(media_node *node, media_node_id nodeid, team_id team) { + BAutolock lock(fLocker); registered_node *rn; bool b; TRACE("NodeManager::GetCloneForId enter: node %ld team %ld\n", nodeid, team); @@ -171,6 +178,7 @@ NodeManager::GetCloneForId(media_node *node, media_node_id nodeid, team_id team) status_t NodeManager::GetClone(media_node *node, char *input_name, int32 *input_id, node_type type, team_id team) { + BAutolock lock(fLocker); TRACE("!!! NodeManager::GetClone not implemented\n"); *node = media_node::null; return B_ERROR; @@ -180,6 +188,7 @@ NodeManager::GetClone(media_node *node, char *input_name, int32 *input_id, node_ status_t NodeManager::ReleaseNode(const media_node &node, team_id team) { + BAutolock lock(fLocker); TRACE("NodeManager::ReleaseNode enter: node %ld team %ld\n", node.node, team); if (B_OK != DecrementGlobalRefCount(node.node, team)) { TRACE("!!! NodeManager::ReleaseNode: Error: couldn't decrement node %ld team %ld ref count\n", node.node, team); @@ -192,6 +201,7 @@ NodeManager::ReleaseNode(const media_node &node, team_id team) status_t NodeManager::PublishInputs(const media_node &node, const media_input *inputs, int32 count) { + BAutolock lock(fLocker); registered_node *rn; bool b; b = fRegisteredNodeMap->GetPointer(node.node, &rn); @@ -209,6 +219,7 @@ NodeManager::PublishInputs(const media_node &node, const media_input *inputs, in status_t NodeManager::PublishOutputs(const media_node &node, const media_output *outputs, int32 count) { + BAutolock lock(fLocker); registered_node *rn; bool b; b = fRegisteredNodeMap->GetPointer(node.node, &rn); @@ -226,6 +237,7 @@ NodeManager::PublishOutputs(const media_node &node, const media_output *outputs, status_t NodeManager::FindNodeId(media_node_id *nodeid, port_id port) { + BAutolock lock(fLocker); registered_node *rn; for (int32 i = 0; fRegisteredNodeMap->GetPointerAt(i, &rn); i++) { if (rn->port == port) { @@ -258,6 +270,7 @@ NodeManager::FindNodeId(media_node_id *nodeid, port_id port) status_t NodeManager::GetLiveNodeInfo(live_node_info *live_info, const media_node &node) { + BAutolock lock(fLocker); registered_node *rn; for (int32 i = 0; fRegisteredNodeMap->GetPointerAt(i, &rn); i++) { if (rn->nodeid == node.node) { @@ -278,6 +291,7 @@ NodeManager::GetLiveNodeInfo(live_node_info *live_info, const media_node &node) status_t NodeManager::GetInstances(media_node_id *node_ids, int32* count, int32 maxcount, media_addon_id addon_id, int32 addon_flavor_id) { + BAutolock lock(fLocker); registered_node *rn; *count = 0; for (int32 i = 0; (maxcount > 0) && fRegisteredNodeMap->GetPointerAt(i, &rn); i++) { @@ -295,6 +309,7 @@ NodeManager::GetInstances(media_node_id *node_ids, int32* count, int32 maxcount, status_t NodeManager::GetLiveNodes(Stack *livenodes, int32 maxcount, const media_format *inputformat /* = NULL */, const media_format *outputformat /* = NULL */, const char* name /* = NULL */, uint64 require_kinds /* = 0 */) { + BAutolock lock(fLocker); registered_node *rn; int namelen; @@ -358,6 +373,7 @@ NodeManager::GetLiveNodes(Stack *livenodes, int32 maxcount, cons status_t NodeManager::GetDormantNodeInfo(dormant_node_info *node_info, const media_node &node) { + BAutolock lock(fLocker); // XXX not sure if this is correct registered_node *rn; for (int32 i = 0; fRegisteredNodeMap->GetPointerAt(i, &rn); i++) { @@ -382,6 +398,7 @@ NodeManager::GetDormantNodeInfo(dormant_node_info *node_info, const media_node & status_t NodeManager::GetLiveNodes(BMessage *msg) { + BAutolock lock(fLocker); registered_node *rn; for (int32 i = 0; fRegisteredNodeMap->GetPointerAt(i, &rn); i++) msg->AddInt32("media_node_id", rn->nodeid); @@ -391,6 +408,7 @@ NodeManager::GetLiveNodes(BMessage *msg) void NodeManager::RegisterAddon(const entry_ref &ref, media_addon_id *newid) { + BAutolock lock(fLocker); media_addon_id id; id = nextaddonid; nextaddonid += 1; @@ -402,6 +420,7 @@ NodeManager::RegisterAddon(const entry_ref &ref, media_addon_id *newid) void NodeManager::UnregisterAddon(media_addon_id id) { + BAutolock lock(fLocker); RemoveDormantFlavorInfo(id); fAddonPathMap->Remove(id); } @@ -409,18 +428,21 @@ NodeManager::UnregisterAddon(media_addon_id id) void NodeManager::AddDormantFlavorInfo(const dormant_flavor_info &dfi) { + BAutolock lock(fLocker); fDormantFlavorList->Insert(dfi); } void NodeManager::RemoveDormantFlavorInfo(media_addon_id id) { + BAutolock lock(fLocker); UNIMPLEMENTED(); } status_t NodeManager::GetAddonRef(entry_ref *ref, media_addon_id id) { + BAutolock lock(fLocker); return fAddonPathMap->Get(id, ref) ? B_OK : B_ERROR; } @@ -433,6 +455,7 @@ NodeManager::GetDormantNodes(dormant_node_info * out_info, uint64 require_kinds /* = NULL */, uint64 deny_kinds /* = NULL */) { + BAutolock lock(fLocker); int32 maxcount; int32 index; dormant_flavor_info dfi; @@ -492,9 +515,16 @@ NodeManager::GetDormantFlavorInfoFor(media_addon_id addon, int32 flavor_id, dormant_flavor_info *outFlavor) { + BAutolock lock(fLocker); for (int32 index = 0; fDormantFlavorList->GetAt(index, outFlavor); index++) { if (outFlavor->node_info.addon == addon && outFlavor->node_info.flavor_id == flavor_id) return B_OK; } return B_ERROR; } + +void +NodeManager::CleanupTeam(team_id team) +{ + BAutolock lock(fLocker); +} diff --git a/src/servers/media/NodeManager.h b/src/servers/media/NodeManager.h index dc868e6489..504a2c3512 100644 --- a/src/servers/media/NodeManager.h +++ b/src/servers/media/NodeManager.h @@ -83,10 +83,13 @@ public: int32 flavor_id, dormant_flavor_info *outFlavor); + void CleanupTeam(team_id team); + private: media_addon_id nextaddonid; media_node_id nextnodeid; + BLocker *fLocker; List *fDormantFlavorList; Map *fAddonPathMap; Map *fRegisteredNodeMap; diff --git a/src/servers/media/NotificationManager.cpp b/src/servers/media/NotificationManager.cpp index 25ff86c942..cb70d3b7c9 100644 --- a/src/servers/media/NotificationManager.cpp +++ b/src/servers/media/NotificationManager.cpp @@ -13,10 +13,9 @@ #include "DataExchange.h" #include "Notifications.h" #include "NotificationManager.h" +#include "media_server.h" #include "Queue.h" -extern NodeManager *gNodeManager; - #define NOTIFICATION_THREAD_PRIORITY 19 #define TIMEOUT 100000 @@ -24,7 +23,7 @@ extern NodeManager *gNodeManager; NotificationManager::NotificationManager() : fNotificationQueue(new Queue), fNotificationThreadId(-1), - fLocker(new BLocker), + fLocker(new BLocker("notification manager locker")), fNotificationList(new List) { fNotificationThreadId = spawn_thread(NotificationManager::worker_thread, "notification broadcast", NOTIFICATION_THREAD_PRIORITY, this); diff --git a/src/servers/media/Queue.cpp b/src/servers/media/Queue.cpp index 47a6dfc277..e4a2c43bad 100644 --- a/src/servers/media/Queue.cpp +++ b/src/servers/media/Queue.cpp @@ -20,8 +20,8 @@ Queue::Queue() : fList(new BList), - fLocker(new BLocker), - fSem(create_sem(0,"queue sem")) + fLocker(new BLocker("queue locker")), + fSem(create_sem(0, "queue sem")) { } diff --git a/src/servers/media/media_server.cpp b/src/servers/media/media_server.cpp index 0166f539a7..906d15640a 100644 --- a/src/servers/media/media_server.cpp +++ b/src/servers/media/media_server.cpp @@ -10,6 +10,7 @@ #include "BufferManager.h" #include "NodeManager.h" #include "AppManager.h" +#include "media_server.h" #define DEBUG 1 #include #include "debug.h" @@ -86,7 +87,7 @@ private: ServerApp::ServerApp() : BApplication(NEW_MEDIA_SERVER_SIGNATURE), - fLocker(new BLocker("server locker")) + fLocker(new BLocker("media server locker")) { //load volume settings from config file //mVolumeLeft = ???;