Author: axeld Date: 2009-12-07 22:11:13 +0100 (Mon, 07 Dec 2009) New Revision: 34538 Changeset: http://dev.haiku-os.org/changeset/34538/haiku Modified: haiku/trunk/headers/private/media/DormantNodeManager.h haiku/trunk/src/kits/media/DormantNodeManager.cpp haiku/trunk/src/kits/media/MediaRoster.cpp haiku/trunk/src/servers/media/DefaultManager.cpp haiku/trunk/src/servers/media_addon/MediaAddonServer.cpp Log: * Cleaned up DormantNodeManager. * Renamed global variable _DormantNodeManager to gDormantNodeManager. Modified: haiku/trunk/headers/private/media/DormantNodeManager.h =================================================================== --- haiku/trunk/headers/private/media/DormantNodeManager.h 2009-12-07 15:42:08 UTC (rev 34537) +++ haiku/trunk/headers/private/media/DormantNodeManager.h 2009-12-07 21:11:13 UTC (rev 34538) @@ -1,13 +1,20 @@ -/* +/* * Copyright 2002, Marcus Overhagen. All rights reserved. * Distributed under the terms of the MIT License. */ - #ifndef _DORMANT_NODE_MANAGER_H #define _DORMANT_NODE_MANAGER_H -#include "TMap.h" +#include <map> + +#include <Locker.h> +#include <MediaAddOn.h> + + +class BPath; + + namespace BPrivate { namespace media { @@ -22,48 +29,50 @@ // but will delay the unloading slightly, because it is called // from a node destructor of the loaded add-on. -class DormantNodeManager -{ +class DormantNodeManager { public: - DormantNodeManager(); - ~DormantNodeManager(); + DormantNodeManager(); + ~DormantNodeManager(); // Be careful, GetAddon and PutAddon[Delayed] must be balanced. - BMediaAddOn *GetAddon(media_addon_id id); - void PutAddon(media_addon_id id); - void PutAddonDelayed(media_addon_id id); + BMediaAddOn* GetAddOn(media_addon_id id); + void PutAddOn(media_addon_id id); + void PutAddOnDelayed(media_addon_id id); // For use by media_addon_server only - media_addon_id RegisterAddon(const char *path); - void UnregisterAddon(media_addon_id id); - + media_addon_id RegisterAddOn(const char* path); + void UnregisterAddOn(media_addon_id id); + // query the server for the path - status_t FindAddonPath(BPath *path, media_addon_id id); + status_t FindAddOnPath(BPath* path, media_addon_id id); private: - struct loaded_addon_info - { - BMediaAddOn *addon; - image_id image; - int32 usecount; - }; + struct loaded_add_on_info { + BMediaAddOn* add_on; + image_id image; + int32 use_count; + }; // returns the addon or NULL if it needs to be loaded - BMediaAddOn *TryGetAddon(media_addon_id id); - + BMediaAddOn* _LookupAddOn(media_addon_id id); + // manage loading and unloading add-ons from images - status_t LoadAddon(BMediaAddOn **newaddon, image_id *newimage, const char *path, media_addon_id id); - void UnloadAddon(BMediaAddOn *addon, image_id image); - + status_t _LoadAddOn(const char* path, media_addon_id id, + BMediaAddOn** _newAddOn, + image_id* _newImage); + void _UnloadAddOn(BMediaAddOn* addOn, + image_id image); + private: + typedef std::map<media_addon_id, loaded_add_on_info> AddOnMap; - Map<media_addon_id,loaded_addon_info> *fAddonmap; - BLocker *fLock; + BLocker fLock; + AddOnMap fAddOnMap; }; -}; // namespace media -}; // namespace BPrivate +} // namespace media +} // namespace BPrivate -extern BPrivate::media::DormantNodeManager *_DormantNodeManager; +extern BPrivate::media::DormantNodeManager* gDormantNodeManager; #endif /* _DORMANT_NODE_MANAGER_H */ Modified: haiku/trunk/src/kits/media/DormantNodeManager.cpp =================================================================== --- haiku/trunk/src/kits/media/DormantNodeManager.cpp 2009-12-07 15:42:08 UTC (rev 34537) +++ haiku/trunk/src/kits/media/DormantNodeManager.cpp 2009-12-07 21:11:13 UTC (rev 34538) @@ -27,136 +27,161 @@ * */ -/* This is a management class for dormant media nodes. - * It is private to the media kit and only accessed by the BMediaRoster class - * and the media_addon_server. - * It handles loading/unloading of dormant nodes. - * - * Dormant media nodes can be instantiated on demand. The reside on harddisk in the - * directories /boot/beos/system/add-ons/media and /boot/home/config/add-ons/media - * Multiple media nodes can be included in one file, they can be accessed using the - * BMediaAddOn that each file implements. - * The BMediaAddOn allows getting a list of supported flavors. Each flavor represents - * a media node. - * The media_addon_server does the initial scanning of files and getting the list - * of supported flavors. It uses the flavor_info to do this, and reports the list - * of flavors to the media_server packed into individual dormant_media_node - * structures. - */ +/*! This is a management class for dormant media nodes. + It is private to the media kit and only accessed by the BMediaRoster class + and the media_addon_server. + It handles loading/unloading of dormant nodes. + + Dormant media nodes can be instantiated on demand. The reside on harddisk in + the directories /boot/beos/system/add-ons/media, /boot/common/add-ons/media, + and /boot/home/config/add-ons/media. + Multiple media nodes can be included in one file, they can be accessed using + the BMediaAddOn that each file implements. + The BMediaAddOn allows getting a list of supported flavors. Each flavor + represents a media node. + The media_addon_server does the initial scanning of files and getting the + list of supported flavors. It uses the flavor_info to do this, and reports + the list of flavors to the media_server packed into individual + dormant_media_node structures. +*/ + + +#include "DormantNodeManager.h" + #include <stdio.h> #include <string.h> -#include <Locker.h> + +#include <Autolock.h> +#include <Entry.h> #include <Path.h> -#include <Entry.h> -#include <MediaAddOn.h> -#include "debug.h" -#include "PortPool.h" -#include "MediaMisc.h" -#include "ServerInterface.h" -#include "DataExchange.h" -#include "DormantNodeManager.h" +#include <debug.h> +#include <PortPool.h> +#include <MediaMisc.h> +#include <ServerInterface.h> +#include <DataExchange.h> + + static BPrivate::media::DormantNodeManager manager; -BPrivate::media::DormantNodeManager *_DormantNodeManager = &manager; +BPrivate::media::DormantNodeManager* gDormantNodeManager = &manager; + namespace BPrivate { namespace media { + DormantNodeManager::DormantNodeManager() + : + fLock("dormant node manager locker") { - fLock = new BLocker("dormant node manager locker"); - fAddonmap = new Map<media_addon_id,loaded_addon_info>; } DormantNodeManager::~DormantNodeManager() { - delete fLock; - // force unloading all currently loaded images - loaded_addon_info *info; - for (fAddonmap->Rewind(); fAddonmap->GetNext(&info); ) { - ERROR("Forcing unload of add-on id %ld with usecount %ld\n", info->addon->AddonID(), info->usecount); - UnloadAddon(info->addon, info->image); - } - delete fAddonmap; -} + AddOnMap::iterator iterator = fAddOnMap.begin(); + for (; iterator != fAddOnMap.end(); iterator++) { + loaded_add_on_info& info = iterator->second; - -BMediaAddOn * -DormantNodeManager::TryGetAddon(media_addon_id id) -{ - loaded_addon_info *info; - BMediaAddOn *addon; - - fLock->Lock(); - if (fAddonmap->Get(id, &info)) { - info->usecount += 1; - addon = info->addon; - ASSERT(id == addon->AddonID()); - } else { - addon = NULL; + ERROR("Forcing unload of add-on id %ld with usecount %ld\n", + info.add_on->AddonID(), info.use_count); + _UnloadAddOn(info.add_on, info.image); } - fLock->Unlock(); - return addon; } -BMediaAddOn * -DormantNodeManager::GetAddon(media_addon_id id) +BMediaAddOn* +DormantNodeManager::GetAddOn(media_addon_id id) { - BMediaAddOn *addon; + TRACE("DormantNodeManager::GetAddon, id %ld\n", id); - TRACE("DormantNodeManager::GetAddon, id %ld\n",id); - // first try to use a already loaded add-on - addon = TryGetAddon(id); - if (addon) - return addon; + BMediaAddOn* addOn = _LookupAddOn(id); + if (addOn != NULL) + return addOn; // Be careful, we avoid locking here! // ok, it's not loaded, try to get the path BPath path; - if (B_OK != FindAddonPath(&path, id)) { - ERROR("DormantNodeManager::GetAddon: can't find path for add-on %ld\n",id); + if (FindAddOnPath(&path, id) != B_OK) { + ERROR("DormantNodeManager::GetAddon: can't find path for add-on " + "%ld\n", id); return NULL; } // try to load it - BMediaAddOn *newaddon; + BMediaAddOn* newAddOn; image_id image; - if (B_OK != LoadAddon(&newaddon, &image, path.Path(), id)) { - ERROR("DormantNodeManager::GetAddon: can't load add-on %ld from path %s\n",id, path.Path()); + if (_LoadAddOn(path.Path(), id, &newAddOn, &image) != B_OK) { + ERROR("DormantNodeManager::GetAddon: can't load add-on %ld from path " + "%s\n",id, path.Path()); return NULL; } // ok, we successfully loaded it. Now lock and insert it into the map, // or unload it if the map already contains one that was loaded by another // thread at the same time - fLock->Lock(); - addon = TryGetAddon(id); - if (addon) { - UnloadAddon(newaddon, image); - } else { + + BAutolock _(fLock); + + addOn = _LookupAddOn(id); + if (addOn == NULL) { // we use the loaded one - addon = newaddon; + addOn = newAddOn; + // and save it into the list - loaded_addon_info info; - info.addon = newaddon; + loaded_add_on_info info; + info.add_on = newAddOn; info.image = image; - info.usecount = 1; - fAddonmap->Insert(id, info); + info.use_count = 1; + try { + fAddOnMap.insert(std::make_pair(id, info)); + } catch (std::bad_alloc& exception) { + _UnloadAddOn(newAddOn, image); + return NULL; + } + } else + _UnloadAddOn(newAddOn, image); + + ASSERT(addOn->AddonID() == id); + return addOn; +} + + +void +DormantNodeManager::PutAddOn(media_addon_id id) +{ + TRACE("DormantNodeManager::PutAddon, id %ld\n", id); + + BAutolock locker(fLock); + + AddOnMap::iterator found = fAddOnMap.find(id); + if (found == fAddOnMap.end()) { + ERROR("DormantNodeManager::PutAddon: failed to find add-on %ld\n", id); + return; } - fLock->Unlock(); - ASSERT(addon->AddonID() == id); - return addon; + + loaded_add_on_info& info = found->second; + + if (--info.use_count == 0) { + // unload add-on + + BMediaAddOn* addOn = info.add_on; + image_id image = info.image; + fAddOnMap.erase(found); + + locker.Unlock(); + _UnloadAddOn(addOn, image); + } } + void -DormantNodeManager::PutAddonDelayed(media_addon_id id) +DormantNodeManager::PutAddOnDelayed(media_addon_id id) { // Called from a node destructor of the loaded media-add-on. // We must make sure that the media-add-on stays in memory @@ -165,70 +190,49 @@ UNIMPLEMENTED(); } -void -DormantNodeManager::PutAddon(media_addon_id id) -{ - loaded_addon_info *info; - BMediaAddOn *addon = 0; /* avoid compiler warning */ - image_id image = 0; /* avoid compiler warning */ - bool unload; - TRACE("DormantNodeManager::PutAddon, id %ld\n",id); - - fLock->Lock(); - if (!fAddonmap->Get(id, &info)) { - ERROR("DormantNodeManager::PutAddon: failed to find add-on %ld\n",id); - fLock->Unlock(); - return; - } - info->usecount -= 1; - unload = (info->usecount == 0); - if (unload) { - addon = info->addon; - image = info->image; - fAddonmap->Remove(id); - } - fLock->Unlock(); - - if (unload) - UnloadAddon(addon, image); -} - -// For use by media_addon_server only +//! For use by media_addon_server only media_addon_id -DormantNodeManager::RegisterAddon(const char *path) +DormantNodeManager::RegisterAddOn(const char* path) { - server_register_mediaaddon_request msg; - server_register_mediaaddon_reply reply; - port_id port; - status_t rv; - int32 code; - entry_ref tempref; - TRACE("DormantNodeManager::RegisterAddon, path %s\n",path); - rv = get_ref_for_path(path, &tempref); - if (rv != B_OK) { - ERROR("DormantNodeManager::RegisterAddon failed, couldn't get ref for path %s\n",path); + server_register_mediaaddon_request msg; + entry_ref ref; + status_t status = get_ref_for_path(path, &ref); + if (status != B_OK) { + ERROR("DormantNodeManager::RegisterAddon failed, couldn't get ref " + "for path %s: %s\n", path, strerror(status)); return 0; } - msg.ref = tempref; - port = find_port(MEDIA_SERVER_PORT_NAME); - if (port <= B_OK) { - ERROR("DormantNodeManager::RegisterAddon failed, couldn't find media server\n"); + + port_id port = find_port(MEDIA_SERVER_PORT_NAME); + if (port < 0) { + ERROR("DormantNodeManager::RegisterAddon failed, couldn't find media " + "server\n"); return 0; } + msg.reply_port = _PortPool->GetPort(); - rv = write_port(port, SERVER_REGISTER_MEDIAADDON, &msg, sizeof(msg)); - if (rv != B_OK) { + msg.ref = ref; + + status = write_port(port, SERVER_REGISTER_MEDIAADDON, &msg, sizeof(msg)); + if (status != B_OK) { _PortPool->PutPort(msg.reply_port); - ERROR("DormantNodeManager::RegisterAddon failed, couldn't talk to media server\n"); + ERROR("DormantNodeManager::RegisterAddon failed, couldn't talk to " + "media server\n"); return 0; } - rv = read_port(msg.reply_port, &code, &reply, sizeof(reply)); + + server_register_mediaaddon_reply reply; + int32 code; + status = read_port(msg.reply_port, &code, &reply, sizeof(reply)); + _PortPool->PutPort(msg.reply_port); - if (rv < B_OK) { - ERROR("DormantNodeManager::RegisterAddon failed, couldn't talk to media server (2)\n"); + + if (status < B_OK) { + ERROR("DormantNodeManager::RegisterAddon failed, couldn't talk to " + "media server: %s\n", strerror(status)); return 0; } @@ -238,104 +242,128 @@ return reply.addon_id; } -// For use by media_addon_server only + +//! For use by media_addon_server only void -DormantNodeManager::UnregisterAddon(media_addon_id id) +DormantNodeManager::UnregisterAddOn(media_addon_id id) { + TRACE("DormantNodeManager::UnregisterAddon id %ld\n",id); ASSERT(id > 0); - server_unregister_mediaaddon_command msg; - TRACE("DormantNodeManager::UnregisterAddon id %ld\n",id); + port_id port = find_port(MEDIA_SERVER_PORT_NAME); + if (port < 0) + return; - port_id port; - port = find_port(MEDIA_SERVER_PORT_NAME); - if (port <= B_OK) - return; + server_unregister_mediaaddon_command msg; msg.addon_id = id; write_port(port, SERVER_UNREGISTER_MEDIAADDON, &msg, sizeof(msg)); } status_t -DormantNodeManager::FindAddonPath(BPath *path, media_addon_id id) +DormantNodeManager::FindAddOnPath(BPath* path, media_addon_id id) { + port_id port = find_port(MEDIA_SERVER_PORT_NAME); + if (port < 0) + return B_ERROR; + server_get_mediaaddon_ref_request msg; - server_get_mediaaddon_ref_reply reply; - port_id port; - entry_ref tempref; - status_t rv; - int32 code; - port = find_port(MEDIA_SERVER_PORT_NAME); - if (port <= B_OK) - return B_ERROR; msg.addon_id = id; msg.reply_port = _PortPool->GetPort(); - rv = write_port(port, SERVER_GET_MEDIAADDON_REF, &msg, sizeof(msg)); - if (rv != B_OK) { + status_t status = write_port(port, SERVER_GET_MEDIAADDON_REF, &msg, + sizeof(msg)); + if (status != B_OK) { _PortPool->PutPort(msg.reply_port); - return B_ERROR; + return status; } - rv = read_port(msg.reply_port, &code, &reply, sizeof(reply)); + + server_get_mediaaddon_ref_reply reply; + int32 code; + status = read_port(msg.reply_port, &code, &reply, sizeof(reply)); + _PortPool->PutPort(msg.reply_port); - if (rv < B_OK) - return B_ERROR; - tempref = reply.ref; - return path->SetTo(&tempref); + if (status < B_OK) + return status; + + entry_ref ref = reply.ref; + return path->SetTo(&ref); } +BMediaAddOn* +DormantNodeManager::_LookupAddOn(media_addon_id id) +{ + BAutolock _(fLock); + + AddOnMap::iterator found = fAddOnMap.find(id); + if (found == fAddOnMap.end()) + return NULL; + + loaded_add_on_info& info = found->second; + + ASSERT(id == info.add_on->AddonID()); + info.use_count++; + + return info.add_on; +} + + status_t -DormantNodeManager::LoadAddon(BMediaAddOn **newaddon, image_id *newimage, const char *path, media_addon_id id) +DormantNodeManager::_LoadAddOn(const char* path, media_addon_id id, + BMediaAddOn** _newAddOn, image_id* _newImage) { - BMediaAddOn *(*make_addon)(image_id you); - BMediaAddOn *addon; - image_id image; - status_t rv; - - image = load_add_on(path); - if (image < B_OK) { - ERROR("DormantNodeManager::LoadAddon: loading failed, error %lx (%s), path %s\n", image, strerror(image), path); - return B_ERROR; + image_id image = load_add_on(path); + if (image < 0) { + ERROR("DormantNodeManager::LoadAddon: loading \"%s\" failed: %s\n", + path, strerror(image)); + return image; } - rv = get_image_symbol(image, "make_media_addon", B_SYMBOL_TYPE_TEXT, (void**)&make_addon); - if (rv < B_OK) { - ERROR("DormantNodeManager::LoadAddon: loading failed, function not found, error %lx (%s)\n", rv, strerror(rv)); + BMediaAddOn* (*makeAddOn)(image_id); + status_t status = get_image_symbol(image, "make_media_addon", + B_SYMBOL_TYPE_TEXT, (void**)&makeAddOn); + if (status != B_OK) { + ERROR("DormantNodeManager::LoadAddon: loading failed, function not " + "found: %s\n", strerror(status)); unload_add_on(image); - return B_ERROR; + return status; } - addon = make_addon(image); - if (addon == 0) { + BMediaAddOn* addOn = makeAddOn(image); + if (addOn == NULL) { ERROR("DormantNodeManager::LoadAddon: creating BMediaAddOn failed\n"); unload_add_on(image); return B_ERROR; } - ASSERT(addon->ImageID() == image); // this should be true for a well behaving add-on + ASSERT(addOn->ImageID() == image); + // this should be true for a well behaving add-ons + // We are a friend class of BMediaAddOn and initialize these member + // variables + addOn->fAddon = id; + addOn->fImage = image; + // everything ok - *newaddon = addon; - *newimage = image; + *_newAddOn = addOn; + *_newImage = image; - // we are a friend class of BMediaAddOn and initialize these member variables - addon->fAddon = id; - addon->fImage = image; - return B_OK; } void -DormantNodeManager::UnloadAddon(BMediaAddOn *addon, image_id image) +DormantNodeManager::_UnloadAddOn(BMediaAddOn* addOn, image_id image) { - ASSERT(addon); - ASSERT(addon->ImageID() == image); // if this failes, something bad happened to the add-on - delete addon; + ASSERT(addOn != NULL); + ASSERT(addOn->ImageID() == image); + // if this fails, something bad happened to the add-on + + delete addOn; unload_add_on(image); } -}; // namespace media -}; // namespace BPrivate +} // namespace media +} // namespace BPrivate Modified: haiku/trunk/src/kits/media/MediaRoster.cpp =================================================================== --- haiku/trunk/src/kits/media/MediaRoster.cpp 2009-12-07 15:42:08 UTC (rev 34537) +++ haiku/trunk/src/kits/media/MediaRoster.cpp 2009-12-07 21:11:13 UTC (rev 34538) @@ -2005,7 +2005,7 @@ TRACE("BMediaRoster::UnregisterNode %ld (%p)\n", node->ID(), node); - if (node->fKinds & NODE_KIND_NO_REFCOUNTING) { + if ((node->fKinds & NODE_KIND_NO_REFCOUNTING) !=0) { TRACE("BMediaRoster::UnregisterNode, trying to unregister reference " "counting disabled timesource, node %ld, port %ld, team %ld\n", node->ID(), node->ControlPort(), BPrivate::current_team()); @@ -2030,35 +2030,34 @@ // might have been called). server_unregister_node_request request; - server_unregister_node_reply reply; - status_t rv; - request.node_id = node->ID(); request.team = BPrivate::current_team(); // send a notification BPrivate::media::notifications::NodesDeleted(&request.node_id, 1); - rv = QueryServer(SERVER_UNREGISTER_NODE, &request, sizeof(request), &reply, - sizeof(reply)); - if (rv != B_OK) { + server_unregister_node_reply reply; + status_t status = QueryServer(SERVER_UNREGISTER_NODE, &request, + sizeof(request), &reply, sizeof(reply)); + if (status != B_OK) { ERROR("BMediaRoster::UnregisterNode: failed to unregister node id %ld, " - "name '%s' (error %#lx)\n", node->ID(), node->Name(), rv); - return rv; + "name '%s': %s\n", node->ID(), node->Name(), strerror(status)); + return status; } if (reply.addon_id != -1) { - // Small problem here, we can't use DormantNodeManager::PutAddon(), as + // TODO: this doesn't look right + // Small problem here, we can't use DormantNodeManager::PutAddOn(), as // UnregisterNode() is called by a dormant node itself (by the // destructor). // The add-on that contains the node needs to remain in memory until the // destructor execution is finished. - // DormantNodeManager::PutAddonDelayed() will delay unloading. - _DormantNodeManager->PutAddonDelayed(reply.addon_id); + // DormantNodeManager::PutAddOnDelayed() will delay unloading. + gDormantNodeManager->PutAddOnDelayed(reply.addon_id); - rv = MediaRosterEx(this)->DecrementAddonFlavorInstancesCount( + status = MediaRosterEx(this)->DecrementAddonFlavorInstancesCount( reply.addon_id, reply.flavor_id); - if (rv != B_OK) { + if (status != B_OK) { ERROR("BMediaRoster::UnregisterNode: " "DecrementAddonFlavorInstancesCount() failed\n"); // this is really a problem, but we can't fail now @@ -2377,8 +2376,7 @@ ASSERT(info.internal_id == flavorID); // load the BMediaAddOn object - BMediaAddOn* addon; - addon = _DormantNodeManager->GetAddon(addonID); + BMediaAddOn* addon = gDormantNodeManager->GetAddOn(addonID); if (addon == NULL) { ERROR("BMediaRosterEx::InstantiateDormantNode: GetAddon failed\n"); return B_ERROR; @@ -2392,7 +2390,7 @@ ERROR("BMediaRosterEx::InstantiateDormantNode error: can't create " "more nodes for addon-id %ld, flavor-id %ld\n", addonID, flavorID); // Put the addon back into the pool - _DormantNodeManager->PutAddon(addonID); + gDormantNodeManager->PutAddOn(addonID); return B_ERROR; } @@ -2412,7 +2410,7 @@ "failed\n"); // Put the addon back into the pool - _DormantNodeManager->PutAddon(addonID); + gDormantNodeManager->PutAddOn(addonID); // We must decrement the use count of this addon flavor in the // server to compensate the increment done in the beginning. @@ -2429,7 +2427,7 @@ ERROR("BMediaRosterEx::InstantiateDormantNode: RegisterNode failed\n"); delete node; // Put the addon back into the pool - _DormantNodeManager->PutAddon(addonID); + gDormantNodeManager->PutAddOn(addonID); // We must decrement the use count of this addon flavor in the // server to compensate the increment done in the beginning. rv = DecrementAddonFlavorInstancesCount(addonID, flavorID); Modified: haiku/trunk/src/servers/media/DefaultManager.cpp =================================================================== --- haiku/trunk/src/servers/media/DefaultManager.cpp 2009-12-07 15:42:08 UTC (rev 34537) +++ haiku/trunk/src/servers/media/DefaultManager.cpp 2009-12-07 21:11:13 UTC (rev 34538) @@ -368,9 +368,9 @@ msg->FindInt32(kDefaultManagerInput, &input_id); msg->FindString(kDefaultManagerFlavorName, &name); msg->FindString(kDefaultManagerPath, &path); - if(name) + if (name) strcpy(msgDninfo.name, name); - if(path) + if (path) msgPath = BPath(path); break; } @@ -411,28 +411,30 @@ continue; } } - if(msg) { // we have a default info msg + if (msg) { // we have a default info msg dormant_node_info dninfo; - if(BMediaRoster::Roster()->GetDormantNodeFor(info[i].node, &dninfo) != B_OK) { + if (BMediaRoster::Roster()->GetDormantNodeFor(info[i].node, + &dninfo) != B_OK) { ERROR("Couldn't GetDormantNodeFor\n"); continue; } - if(dninfo.flavor_id!=msgDninfo.flavor_id - || strcmp(dninfo.name, msgDninfo.name)!=0) { + if (dninfo.flavor_id != msgDninfo.flavor_id + || strcmp(dninfo.name, msgDninfo.name) != 0) { ERROR("Doesn't match flavor or name\n"); continue; } BPath path; - if((_DormantNodeManager->FindAddonPath(&path, dninfo.addon)!=B_OK) - || (path != msgPath)) { + if (gDormantNodeManager->FindAddOnPath(&path, dninfo.addon) != B_OK + || path != msgPath) { ERROR("Doesn't match : path\n"); continue; } } TRACE("Default physical %s %s \"%s\" created!\n", - isAudio ? "audio" : "video", isInput ? "input" : "output", info[i].name); + isAudio ? "audio" : "video", isInput ? "input" : "output", + info[i].name); *id = info[i].node.node; - if(msg && isAudio && !isInput) + if (msg && isAudio && !isInput) fPhysicalAudioOutInputID = input_id; return; } Modified: haiku/trunk/src/servers/media_addon/MediaAddonServer.cpp =================================================================== --- haiku/trunk/src/servers/media_addon/MediaAddonServer.cpp 2009-12-07 15:42:08 UTC (rev 34537) +++ haiku/trunk/src/servers/media_addon/MediaAddonServer.cpp 2009-12-07 21:11:13 UTC (rev 34538) @@ -78,7 +78,7 @@ NodeVector active_flavors; BMediaAddOn* addon; - // if != NULL, need to call _DormantNodeManager->PutAddon(id) + // if != NULL, need to call gDormantNodeManager->PutAddOn(id) }; @@ -226,7 +226,7 @@ // unregister all media add-ons FileMap::iterator iterator = fFileMap.begin(); for (; iterator != fFileMap.end(); iterator++) - _DormantNodeManager->UnregisterAddon(iterator->second); + gDormantNodeManager->UnregisterAddOn(iterator->second); // TODO: unregister system time source } @@ -402,14 +402,14 @@ = static_cast< const addonserver_rescan_mediaaddon_flavors_command*>(data); BMediaAddOn* addon - = _DormantNodeManager->GetAddon(command->addon_id); + = gDormantNodeManager->GetAddOn(command->addon_id); if (addon == NULL) { ERROR("rescan flavors: Can't find a addon object for id %d\n", (int)command->addon_id); break; } _ScanAddOnFlavors(addon); - _DormantNodeManager->PutAddon(command->addon_id); + gDormantNodeManager->PutAddOn(command->addon_id); break; } @@ -533,7 +533,7 @@ { TRACE("\n\nMediaAddonServer::_AddOnAdded: path %s\n", path); - media_addon_id id = _DormantNodeManager->RegisterAddon(path); + media_addon_id id = gDormantNodeManager->RegisterAddOn(path); if (id <= 0) { ERROR("MediaAddonServer::_AddOnAdded: failed to register add-on %s\n", path); @@ -542,10 +542,10 @@ TRACE("MediaAddonServer::_AddOnAdded: loading addon %ld now...\n", id); - BMediaAddOn* addon = _DormantNodeManager->GetAddon(id); + BMediaAddOn* addon = gDormantNodeManager->GetAddOn(id); if (addon == NULL) { ERROR("MediaAddonServer::_AddOnAdded: failed to get add-on %s\n", path); - _DormantNodeManager->UnregisterAddon(id); + gDormantNodeManager->UnregisterAddOn(id); return; } @@ -598,7 +598,7 @@ SendToServer(SERVER_RESCAN_DEFAULTS, &cmd, sizeof(cmd)); } - // we do not call _DormantNodeManager->PutAddon(id) + // we do not call gDormantNodeManager->PutAddOn(id) // since it is done by _PutAddonIfPossible() } @@ -689,7 +689,7 @@ MediaAddonServer::_PutAddonIfPossible(AddOnInfo& info) { if (info.addon && info.active_flavors.empty()) { - _DormantNodeManager->PutAddon(info.id); + gDormantNodeManager->PutAddOn(info.id); info.addon = NULL; } } @@ -809,7 +809,7 @@ fInfoMap.erase(foundInfo); } - _DormantNodeManager->UnregisterAddon(id); + gDormantNodeManager->UnregisterAddOn(id); BPrivate::media::notifications::FlavorsChanged(id, 0, oldFlavorCount); }