[haiku-commits] haiku: hrev52796 - src/servers/registrar headers/private/app

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 24 Jan 2019 13:57:54 -0500 (EST)

hrev52796 adds 1 changeset to branch 'master'
old head: f290b766707b386d72e2eaadd35cc3d999405077
new head: 9edb207fab5cdd1da164954e616ea6dba30e826e
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=9edb207fab5c+%5Ef290b766707b

----------------------------------------------------------------------------

9edb207fab5c: Fix for bug 6991, replace registrars timer tick
  
  Registrar schedules an event every second to do
  fRoster-CheckSanity(). This uses 2.5% cpu on my machine
  when idle. Changing it to five seconds lowers it to 0.1%
  
  waddlesplash then pointed me to this bug which changes it
  to watch for team deletion and call fRoster->CheckSanity()
  
  As I know little in this area, it's mostly based on what
  LaunchDaemon does in MessageRecieved.
  
  Change-Id: Ie69f9399cab41d2d492d469b5d3dc88e6080c15c
  Reviewed-on: https://review.haiku-os.org/c/876
  Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>

                         [ Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev52796
Commit:      9edb207fab5cdd1da164954e616ea6dba30e826e
URL:         https://git.haiku-os.org/haiku/commit/?id=9edb207fab5c
Author:      Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>
Date:        Sat Jan 12 20:05:47 2019 UTC
Committer:   waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Thu Jan 24 18:57:50 2019 UTC

----------------------------------------------------------------------------

3 files changed, 17 insertions(+), 16 deletions(-)
headers/private/app/RegistrarDefs.h |  1 -
src/servers/registrar/Registrar.cpp | 31 +++++++++++++++++--------------
src/servers/registrar/Registrar.h   |  1 -

----------------------------------------------------------------------------

diff --git a/headers/private/app/RegistrarDefs.h 
b/headers/private/app/RegistrarDefs.h
index 240f3909d4..4df6c3d776 100644
--- a/headers/private/app/RegistrarDefs.h
+++ b/headers/private/app/RegistrarDefs.h
@@ -96,7 +96,6 @@ enum {
        B_REG_GET_MESSAGE_RUNNER_INFO                   = 'rgri',
 
        // internal registrar messages
-       B_REG_ROSTER_SANITY_EVENT                               = 'rgir',
        B_REG_SHUTDOWN_FINISHED                                 = 'rgsf',
        B_REG_ROSTER_DEVICE_RESCAN                              = 'rgrs',
 
diff --git a/src/servers/registrar/Registrar.cpp 
b/src/servers/registrar/Registrar.cpp
index 7987a1bc63..e5283b2415 100644
--- a/src/servers/registrar/Registrar.cpp
+++ b/src/servers/registrar/Registrar.cpp
@@ -16,9 +16,11 @@
 #include <Application.h>
 #include <Clipboard.h>
 #include <Message.h>
+#include <MessengerPrivate.h>
 #include <OS.h>
 #include <RegistrarDefs.h>
 #include <RosterPrivate.h>
+#include <system_info.h>
 
 #include "AuthenticationManager.h"
 #include "ClipboardHandler.h"
@@ -47,9 +49,6 @@ using namespace BPrivate;
 //! Name of the event queue.
 static const char *kEventQueueName = "timer_thread";
 
-//! Time interval between two roster sanity checks (1 s).
-static const bigtime_t kRosterSanityEventInterval = 1000000LL;
-
 
 /*!    \brief Creates the registrar application class.
        \param error Passed to the BApplication constructor for returning an
@@ -63,7 +62,6 @@ Registrar::Registrar(status_t* _error)
        fMIMEManager(NULL),
        fEventQueue(NULL),
        fMessageRunnerManager(NULL),
-       fSanityEvent(NULL),
        fShutdownProcess(NULL),
        fAuthenticationManager(NULL),
        fPackageWatchingManager(NULL)
@@ -88,7 +86,6 @@ Registrar::~Registrar()
        delete fPackageWatchingManager;
        delete fMessageRunnerManager;
        delete fEventQueue;
-       delete fSanityEvent;
        fMIMEManager->Lock();
        fMIMEManager->Quit();
        RemoveHandler(fClipboardHandler);
@@ -172,11 +169,15 @@ Registrar::ReadyToRun()
        // create the package watching manager
        fPackageWatchingManager = new PackageWatchingManager;
 
-       // create and schedule the sanity message event
-       fSanityEvent = new MessageEvent(system_time() + 
kRosterSanityEventInterval,
-               this, B_REG_ROSTER_SANITY_EVENT);
-       fSanityEvent->SetAutoDelete(false);
-       fEventQueue->AddEvent(fSanityEvent);
+       // Sanity check roster after team deletion
+       BMessenger target(this);
+       BMessenger::Private messengerPrivate(target);
+
+       port_id port = messengerPrivate.Port();
+       int32 token = messengerPrivate.Token();
+       __start_watching_system(-1, B_WATCH_SYSTEM_TEAM_DELETION, port, token);
+       fRoster->CheckSanity();
+               // Clean up any teams that exited before we started watching
 
        FUNCTION_END();
 }
@@ -352,11 +353,13 @@ Registrar::_MessageReceived(BMessage *message)
                        break;
 
                // internal messages
-               case B_REG_ROSTER_SANITY_EVENT:
-                       fRoster->CheckSanity();
-                       fSanityEvent->SetTime(system_time() + 
kRosterSanityEventInterval);
-                       fEventQueue->AddEvent(fSanityEvent);
+               case B_SYSTEM_OBJECT_UPDATE:
+               {
+                       team_id team = (team_id)message->GetInt32("team", -1);
+                       if (team >= 0 && message->GetInt32("opcode", 0) == 
B_TEAM_DELETED)
+                               fRoster->HandleRemoveApp(message);
                        break;
+               }
                case B_REG_SHUTDOWN_FINISHED:
                        if (fShutdownProcess) {
                                fShutdownProcess->PostMessage(B_QUIT_REQUESTED,
diff --git a/src/servers/registrar/Registrar.h 
b/src/servers/registrar/Registrar.h
index 8be9257115..302bc769ce 100644
--- a/src/servers/registrar/Registrar.h
+++ b/src/servers/registrar/Registrar.h
@@ -64,7 +64,6 @@ private:
        MIMEManager                             *fMIMEManager;
        EventQueue                              *fEventQueue;
        MessageRunnerManager    *fMessageRunnerManager;
-       MessageEvent                    *fSanityEvent;
        ShutdownProcess                 *fShutdownProcess;
        AuthenticationManager   *fAuthenticationManager;
        PackageWatchingManager  *fPackageWatchingManager;


Other related posts:

  • » [haiku-commits] haiku: hrev52796 - src/servers/registrar headers/private/app - waddlesplash