Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a20113e authored by Nate Jiang's avatar Nate Jiang
Browse files

Setting callbacktype type to invalid value before invoking HIDL call

Avoid race condition between event callback and wait context. Make
callbacktype to invalid before call function to change it.

Test: excute VtsHalWifiNanV1_0TargetTest VtsHalWifiNanV1_2TargetTest
Bug: 133484330
Merged-In: I9211c3e172727f56d0cceaf91b98f8d5b3c7fc7e
Change-Id: I0a7e27411cb8fbd877f8228e9d53b62cac424b17
parent cba65807
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -91,12 +91,12 @@ class WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    };

    /* Test code calls this function to wait for data/event callback */
    /* Must set callbackType = INVALID before call this function */
    inline std::cv_status wait(CallbackType waitForCallbackType) {
      std::unique_lock<std::mutex> lock(mtx_);

      EXPECT_NE(INVALID, waitForCallbackType); // can't ASSERT in a non-void-returning method

      callbackType = INVALID;
      std::cv_status status = std::cv_status::no_timeout;
      auto now = std::chrono::system_clock::now();
      while (count_ == 0) {
@@ -469,6 +469,7 @@ TEST(WifiNanIfaceHidlTestNoFixture, FailOnIfaceInvalid) {
 */
TEST_F(WifiNanIfaceHidlTest, getCapabilitiesRequest) {
  uint16_t inputCmdId = 10;
  callbackType = INVALID;
  ASSERT_EQ(WifiStatusCode::SUCCESS,
        HIDL_INVOKE(iwifiNanIface, getCapabilitiesRequest, inputCmdId).code);
  // wait for a callback
+3 −1
Original line number Diff line number Diff line
@@ -100,13 +100,13 @@ class WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase {
    };

    /* Test code calls this function to wait for data/event callback */
    /* Must set callbackType = INVALID before call this function */
    inline std::cv_status wait(CallbackType waitForCallbackType) {
        std::unique_lock<std::mutex> lock(mtx_);

        EXPECT_NE(INVALID, waitForCallbackType);  // can't ASSERT in a
                                                  // non-void-returning method

        callbackType = INVALID;
        std::cv_status status = std::cv_status::no_timeout;
        auto now = std::chrono::system_clock::now();
        while (count_ == 0) {
@@ -475,6 +475,7 @@ TEST(WifiNanIfaceHidlTestNoFixture, Create) {
 */
TEST_F(WifiNanIfaceHidlTest, enableRequest_1_2InvalidArgs) {
    uint16_t inputCmdId = 10;
    callbackType = INVALID;
    NanEnableRequest nanEnableRequest = {};
    NanConfigRequestSupplemental nanConfigRequestSupp = {};
    ASSERT_EQ(WifiStatusCode::SUCCESS,
@@ -509,6 +510,7 @@ TEST_F(WifiNanIfaceHidlTest, enableRequest_1_2ShimInvalidArgs) {
 */
TEST_F(WifiNanIfaceHidlTest, configRequest_1_2InvalidArgs) {
    uint16_t inputCmdId = 10;
    callbackType = INVALID;
    NanConfigRequest nanConfigRequest = {};
    NanConfigRequestSupplemental nanConfigRequestSupp = {};
    ASSERT_EQ(WifiStatusCode::SUCCESS,