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

Commit c9dc19bb authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 4668 into donut

* changes:
  Fix runtime restarts due to sending the wrong flags to dbus.
parents b1cdb648 4a364130
Loading
Loading
Loading
Loading
+21 −11
Original line number Original line Diff line number Diff line
@@ -162,6 +162,19 @@ static const DBusObjectPathVTable agent_vtable = {
    NULL, agent_event_filter, NULL, NULL, NULL, NULL
    NULL, agent_event_filter, NULL, NULL, NULL, NULL
};
};


static unsigned int unix_events_to_dbus_flags(short events) {
    return (events & DBUS_WATCH_READABLE ? POLLIN : 0) |
           (events & DBUS_WATCH_WRITABLE ? POLLOUT : 0) |
           (events & DBUS_WATCH_ERROR ? POLLERR : 0) |
           (events & DBUS_WATCH_HANGUP ? POLLHUP : 0);
}

static short dbus_flags_to_unix_events(unsigned int flags) {
    return (flags & POLLIN ? DBUS_WATCH_READABLE : 0) |
           (flags & POLLOUT ? DBUS_WATCH_WRITABLE : 0) |
           (flags & POLLERR ? DBUS_WATCH_ERROR : 0) |
           (flags & POLLHUP ? DBUS_WATCH_HANGUP : 0);
}


static jboolean setUpEventLoop(native_data_t *nat) {
static jboolean setUpEventLoop(native_data_t *nat) {
    LOGV(__FUNCTION__);
    LOGV(__FUNCTION__);
@@ -385,8 +398,7 @@ static void handleWatchAdd(native_data_t *nat) {
    read(nat->controlFdR, &newFD, sizeof(int));
    read(nat->controlFdR, &newFD, sizeof(int));
    read(nat->controlFdR, &flags, sizeof(unsigned int));
    read(nat->controlFdR, &flags, sizeof(unsigned int));
    read(nat->controlFdR, &watch, sizeof(DBusWatch *));
    read(nat->controlFdR, &watch, sizeof(DBusWatch *));
    int events = (flags & DBUS_WATCH_READABLE ? POLLIN : 0)
    short events = dbus_flags_to_unix_events(flags);
            | (flags & DBUS_WATCH_WRITABLE ? POLLOUT : 0);


    for (int y = 0; y<nat->pollMemberCount; y++) {
    for (int y = 0; y<nat->pollMemberCount; y++) {
        if ((nat->pollData[y].fd == newFD) &&
        if ((nat->pollData[y].fd == newFD) &&
@@ -430,8 +442,7 @@ static void handleWatchRemove(native_data_t *nat) {


    read(nat->controlFdR, &removeFD, sizeof(int));
    read(nat->controlFdR, &removeFD, sizeof(int));
    read(nat->controlFdR, &flags, sizeof(unsigned int));
    read(nat->controlFdR, &flags, sizeof(unsigned int));
    int events = (flags & DBUS_WATCH_READABLE ? POLLIN : 0)
    short events = dbus_flags_to_unix_events(flags);
            | (flags & DBUS_WATCH_WRITABLE ? POLLOUT : 0);


    for (int y = 0; y < nat->pollMemberCount; y++) {
    for (int y = 0; y < nat->pollMemberCount; y++) {
        if ((nat->pollData[y].fd == removeFD) &&
        if ((nat->pollData[y].fd == removeFD) &&
@@ -495,10 +506,9 @@ static void *eventLoopMain(void *ptr) {
                    }
                    }
                }
                }
            } else {
            } else {
                  int event = nat->pollData[i].revents;
                short events = nat->pollData[i].revents;
                  int flags = (event & POLLIN ? DBUS_WATCH_READABLE : 0) |
                unsigned int flags = unix_events_to_dbus_flags(events);
                              (event & POLLOUT ? DBUS_WATCH_WRITABLE : 0);
                dbus_watch_handle(nat->watchData[i], flags);
                  dbus_watch_handle(nat->watchData[i], event);
                nat->pollData[i].revents = 0;
                nat->pollData[i].revents = 0;
                // can only do one - it may have caused a 'remove'
                // can only do one - it may have caused a 'remove'
                break;
                break;