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

Commit bb877e27 authored by Dong Jinguang's avatar Dong Jinguang
Browse files

system property: property set without time spent asleep

There is a 2s timeout for system property set that currently
uses boot_clock as its clock source. If the system goes to sleep
during a property set, it may erroneously cause the timeout to
be reached as boot_clock increments during sleep. This patch
changes from boot_clock to steady_clock to ignore time spent
asleep when determining this timeout.

bug: 71497234
Test: 1. System service process try to set a system property
      with timeout 2s
      2. At the same time, the system go into sleep mode more
      than 2s
      3. System property set will be ok.

Change-Id: I808b9af16974a0f4de60a4ca30ae64d095a13422
parent 93d344d9
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -350,9 +350,11 @@ class SocketConnection {
    ufds[0].events = POLLIN;
    ufds[0].events = POLLIN;
    ufds[0].revents = 0;
    ufds[0].revents = 0;
    while (*timeout_ms > 0) {
    while (*timeout_ms > 0) {
      Timer timer;
        auto start_time = std::chrono::steady_clock::now();
        int nr = poll(ufds, 1, *timeout_ms);
        int nr = poll(ufds, 1, *timeout_ms);
      uint64_t millis = timer.duration().count();
        auto now = std::chrono::steady_clock::now();
        auto time_elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - start_time);
        uint64_t millis = time_elapsed.count();
        *timeout_ms = (millis > *timeout_ms) ? 0 : *timeout_ms - millis;
        *timeout_ms = (millis > *timeout_ms) ? 0 : *timeout_ms - millis;


        if (nr > 0) {
        if (nr > 0) {