summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2017-05-17 18:15:15 -0700
committer Steven Moreland <smoreland@google.com> 2017-05-17 18:27:26 -0700
commit5577d39c380c63ad02a5ca2d7cc5f08c3ebee533 (patch)
treefbe99483740cebb34f35472a53c0fdf033035bfd
parent5c580eaeb6510fee596825d2435182cf9895ae10 (diff)
Fix race condition in displayservice.
Also addressed a couple of format nits and added copyright headers. Note, this race condition wouldn't have occured as is because the service is only being served on one thread. Test: no race condition still Bug: 38311538 Change-Id: I7516c800eb89280a16468934677fa978daa5dcec
-rw-r--r--services/displayservice/DisplayEventReceiver.cpp17
-rw-r--r--services/displayservice/DisplayService.cpp16
-rw-r--r--services/displayservice/include/displayservice/DisplayEventReceiver.h16
-rw-r--r--services/displayservice/include/displayservice/DisplayService.h16
4 files changed, 58 insertions, 7 deletions
diff --git a/services/displayservice/DisplayEventReceiver.cpp b/services/displayservice/DisplayEventReceiver.cpp
index a7fd3c5cba..5993e443e6 100644
--- a/services/displayservice/DisplayEventReceiver.cpp
+++ b/services/displayservice/DisplayEventReceiver.cpp
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#define LOG_TAG "libdisplayservicehidl"
#include <displayservice/DisplayEventReceiver.h>
@@ -43,12 +44,14 @@ sp<Looper> getLooper() {
return looper;
}
-DisplayEventReceiver::AttachedEvent::AttachedEvent(const sp<IEventCallback> &callback) : mCallback(callback) {
+DisplayEventReceiver::AttachedEvent::AttachedEvent(const sp<IEventCallback> &callback)
+ : mCallback(callback)
+{
mLooperAttached = getLooper()->addFd(mFwkReceiver.getFd(),
- Looper::POLL_CALLBACK,
- Looper::EVENT_INPUT,
- this,
- nullptr);
+ Looper::POLL_CALLBACK,
+ Looper::EVENT_INPUT,
+ this,
+ nullptr);
}
DisplayEventReceiver::AttachedEvent::~AttachedEvent() {
@@ -86,7 +89,7 @@ int DisplayEventReceiver::AttachedEvent::handleEvent(int fd, int events, void* /
return 1; // keep the callback
}
- const static size_t SIZE = 1;
+ constexpr size_t SIZE = 1;
ssize_t n;
FwkReceiver::Event buf[SIZE];
@@ -149,11 +152,11 @@ Return<Status> DisplayEventReceiver::requestNextVsync() {
}
Return<Status> DisplayEventReceiver::close() {
+ std::unique_lock<std::mutex> lock(mMutex);
if (mAttached == nullptr) {
return Status::BAD_VALUE;
}
- std::unique_lock<std::mutex> lock(mMutex);
bool success = mAttached->detach();
mAttached = nullptr;
diff --git a/services/displayservice/DisplayService.cpp b/services/displayservice/DisplayService.cpp
index 1699673188..18418fdd4f 100644
--- a/services/displayservice/DisplayService.cpp
+++ b/services/displayservice/DisplayService.cpp
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#include <displayservice/DisplayService.h>
#include <displayservice/DisplayEventReceiver.h>
diff --git a/services/displayservice/include/displayservice/DisplayEventReceiver.h b/services/displayservice/include/displayservice/DisplayEventReceiver.h
index 83c0931c12..5d569b6d53 100644
--- a/services/displayservice/include/displayservice/DisplayEventReceiver.h
+++ b/services/displayservice/include/displayservice/DisplayEventReceiver.h
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#ifndef ANDROID_FRAMEWORKS_DISPLAYSERVICE_V1_0_DISPLAYEVENTRECEIVER_H
#define ANDROID_FRAMEWORKS_DISPLAYSERVICE_V1_0_DISPLAYEVENTRECEIVER_H
diff --git a/services/displayservice/include/displayservice/DisplayService.h b/services/displayservice/include/displayservice/DisplayService.h
index d92cb62cff..9722e7120d 100644
--- a/services/displayservice/include/displayservice/DisplayService.h
+++ b/services/displayservice/include/displayservice/DisplayService.h
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#ifndef ANDROID_FRAMEWORKS_DISPLAYSERVICE_V1_0_DISPLAYSERVICE_H
#define ANDROID_FRAMEWORKS_DISPLAYSERVICE_V1_0_DISPLAYSERVICE_H