registerClientCallback: immediate notification

If there is an existing service, registerClientCallback should
immediately send onClients(true). This is part of the IServiceManager
contract.

Fixes: 123318663
Test: hwservicemanager_test
    HidlServiceLazyTest NotificationSentForNewClientCallback (now passes)
Test: internal 'lazy_hidl_test' fuzzing health storage HAL, health
    storage HAL no longer reports double-de-acquisition of clients.

Change-Id: If83b162262d33de59179b95dbb7175aaafb0f050
diff --git a/test_lazy.cpp b/test_lazy.cpp
index 542bf53..df42329 100644
--- a/test_lazy.cpp
+++ b/test_lazy.cpp
@@ -170,3 +170,30 @@
     service->handleClientCallbacks(true /*onInterval*/);
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
+
+TEST_F(HidlServiceLazyTest, NotificationSentForNewClientCallback) {
+    sp<RecordingClientCallback> cb = new RecordingClientCallback;
+
+    std::unique_ptr<HidlService> service = makeService();
+    service->addClientCallback(cb);
+
+    setReportedClientCount(2);
+    service->handleClientCallbacks(false /*onInterval*/);
+    ASSERT_THAT(cb->stream, ElementsAre(true));
+
+    sp<RecordingClientCallback> laterCb = new RecordingClientCallback;
+    service->addClientCallback(laterCb);
+
+    ASSERT_THAT(cb->stream, ElementsAre(true));
+    ASSERT_THAT(laterCb->stream, ElementsAre(true));
+
+    setReportedClientCount(1);
+
+    service->handleClientCallbacks(true /*onInterval*/);
+    ASSERT_THAT(cb->stream, ElementsAre(true));
+    ASSERT_THAT(laterCb->stream, ElementsAre(true));
+
+    service->handleClientCallbacks(true /*onInterval*/);
+    ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
+    ASSERT_THAT(laterCb->stream, ElementsAre(true, false)); // reported only after two intervals
+}