From 20802959d32254ba7def0f62830abd5d60f7a895 Mon Sep 17 00:00:00 2001 From: Dario Casalinuovo Date: Fri, 22 Apr 2016 15:33:13 +0200 Subject: [PATCH] shutdown_media_server: Rely on actual instance * Makes the shutdown process to rely on the instance that was running at the time the function is called. While it's unlikely anyone will see any change from that, this way we will not conflict in any case with the launch_daemon. * The reply could have been confused in a remote situation, make every request to use an it's own object. * In launch_media_server there was a wrong variable redefinition too. --- src/kits/media/MediaDefs.cpp | 46 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/kits/media/MediaDefs.cpp b/src/kits/media/MediaDefs.cpp index f23feb1343..2084e26e82 100644 --- a/src/kits/media/MediaDefs.cpp +++ b/src/kits/media/MediaDefs.cpp @@ -1298,7 +1298,6 @@ shutdown_media_server(bigtime_t timeout, void* cookie) { BMessage msg(B_QUIT_REQUESTED); - BMessage reply; status_t err = B_MEDIA_SYSTEM_FAILURE; bool shutdown = false; @@ -1314,15 +1313,19 @@ shutdown_media_server(bigtime_t timeout, if ((err = msg.AddBool("be:_user_request", true)) != B_OK) return err; - if (be_roster->IsRunning(B_MEDIA_SERVER_SIGNATURE)) { - BMessenger messenger(B_MEDIA_SERVER_SIGNATURE); + team_id mediaServer = be_roster->TeamFor(B_MEDIA_SERVER_SIGNATURE); + team_id addOnServer = be_roster->TeamFor(B_MEDIA_ADDON_SERVER_SIGNATURE); + + if (mediaServer != B_ERROR) { + BMessage reply; + BMessenger messenger(B_MEDIA_SERVER_SIGNATURE, mediaServer); progress_shutdown(10, progress, cookie); err = messenger.SendMessage(&msg, &reply, 2000000, 2000000); reply.FindBool("_shutdown", &shutdown); if (err == B_TIMED_OUT || shutdown == false) { - if (be_roster->IsRunning(B_MEDIA_SERVER_SIGNATURE)) - kill_team(be_roster->TeamFor(B_MEDIA_SERVER_SIGNATURE)); + if (messenger.IsValid()) + kill_team(mediaServer); } else if (err != B_OK) return err; @@ -1333,24 +1336,29 @@ shutdown_media_server(bigtime_t timeout, return rv; } - if (be_roster->IsRunning(B_MEDIA_ADDON_SERVER_SIGNATURE)) { + if (addOnServer != B_ERROR) { shutdown = false; - BMessenger messenger(B_MEDIA_ADDON_SERVER_SIGNATURE); + BMessage reply; + BMessenger messenger(B_MEDIA_ADDON_SERVER_SIGNATURE, addOnServer); progress_shutdown(40, progress, cookie); - err = messenger.SendMessage(&msg, &reply, 2000000, 2000000); - reply.FindBool("_shutdown", &shutdown); - if (err == B_TIMED_OUT || shutdown == false) { - if (be_roster->IsRunning(B_MEDIA_ADDON_SERVER_SIGNATURE)) - kill_team(be_roster->TeamFor(B_MEDIA_ADDON_SERVER_SIGNATURE)); - } else if (err != B_OK) - return err; + // The media_server usually shutdown the media_addon_server, + // if not let's do something. + if (messenger.IsValid()) { + err = messenger.SendMessage(&msg, &reply, 2000000, 2000000); + reply.FindBool("_shutdown", &shutdown); + if (err == B_TIMED_OUT || shutdown == false) { + if (messenger.IsValid()) + kill_team(addOnServer); + } else if (err != B_OK) + return err; - progress_shutdown(50, progress, cookie); + progress_shutdown(50, progress, cookie); - int32 rv; - if (reply.FindInt32("error", &rv) == B_OK && rv != B_OK) - return rv; + int32 rv; + if (reply.FindInt32("error", &rv) == B_OK && rv != B_OK) + return rv; + } } progress_shutdown(100, progress, cookie); @@ -1430,7 +1438,7 @@ launch_media_server(bigtime_t timeout, // At this point, it might be that the launch_daemon isn't // restarting us, then we'll attempt at launching the server // ourselves. - status_t err = be_roster->Launch(B_MEDIA_SERVER_SIGNATURE); + err = be_roster->Launch(B_MEDIA_SERVER_SIGNATURE); if (err != B_OK) return err;