From 62d30d9e49d587f54159a213a7e68ea47cb5e254 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 19 Apr 2015 22:48:46 +0200 Subject: [PATCH] libmedia: Put AddOnManager into BPrivate::media namespace. The AddOnManager was in the global namespace, clashing with application classes with the same name. The input_server has an AddOnManager of its own. When the shortcut_catcher filter was loaded by said AddOnManager, it in turn loaded libgame.so, which in turn loaded libmedia.so, where an AddOnManager was created for the global AddOnManager instance in libmedia.so. Unfortunately the wrong AddOnManager, the one from the input_server, was created. This lead to two AddOnManagers being active in the input_server which very well could be responsible for #11049 and #11280. This was a regression since the move of the AddOnManager from the media_server to libmedia.so in hrev47086. This also fits with the two tickets. I actually noticed the problem when debugging the shutdown process of the input_server, where the destruction of the wrong AddOnManager caused a deadlock with itself. --- headers/private/media/DecoderPlugin.h | 1 - src/kits/media/AddOnManager.cpp | 8 ++++++++ src/kits/media/AddOnManager.h | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/headers/private/media/DecoderPlugin.h b/headers/private/media/DecoderPlugin.h index b6e3373a3c..5d1f83face 100644 --- a/headers/private/media/DecoderPlugin.h +++ b/headers/private/media/DecoderPlugin.h @@ -5,7 +5,6 @@ #include #include "MediaPlugin.h" -class AddOnManager; namespace BPrivate { namespace media { diff --git a/src/kits/media/AddOnManager.cpp b/src/kits/media/AddOnManager.cpp index 5908100192..5f64abca5c 100644 --- a/src/kits/media/AddOnManager.cpp +++ b/src/kits/media/AddOnManager.cpp @@ -29,6 +29,10 @@ #include "MetaFormat.h" +namespace BPrivate { +namespace media { + + // #pragma mark - ImageLoader /*! The ImageLoader class is a convenience class to temporarily load @@ -556,3 +560,7 @@ AddOnManager::_GetReaders(const BPath& path, entry_ref* outRefs, (*outCount)++; } } + + +} // namespace media +} // namespace BPrivate diff --git a/src/kits/media/AddOnManager.h b/src/kits/media/AddOnManager.h index 32154d284b..964cdcefbc 100644 --- a/src/kits/media/AddOnManager.h +++ b/src/kits/media/AddOnManager.h @@ -25,6 +25,9 @@ #include "WriterPlugin.h" +namespace BPrivate { +namespace media { + class AddOnManager { public: AddOnManager(); @@ -109,4 +112,7 @@ private: static AddOnManager sInstance; }; +} // namespace media +} // namespace BPrivate + #endif // _ADD_ON_MANAGER_H