diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp index 6799b01d7a..4268720846 100644 --- a/src/kits/media/MediaRoster.cpp +++ b/src/kits/media/MediaRoster.cpp @@ -44,6 +44,7 @@ char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus " #include +#include #include #include #include @@ -83,6 +84,7 @@ struct RosterNotification { static bool sServerIsUp = false; static List sNotificationList; +static BLocker sInitLocker("BMediaRoster::Roster locker"); } // namespace media } // namespace BPrivate @@ -2188,10 +2190,14 @@ BMediaRoster::UnregisterNode(BMediaNode* node) /*static*/ BMediaRoster* BMediaRoster::Roster(status_t* out_error) { - static BLocker locker("BMediaRoster::Roster locker"); - locker.Lock(); + BAutolock lock(sInitLocker); + + if (!lock.IsLocked()) + return NULL; + if (out_error) *out_error = B_OK; + if (sDefaultInstance == NULL) { status_t err; sDefaultInstance = new (std::nothrow) BMediaRosterEx(&err); @@ -2207,7 +2213,6 @@ BMediaRoster::Roster(status_t* out_error) *out_error = err; } } - locker.Unlock(); return sDefaultInstance; }