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

Commit 280068de authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Fix alarms being posted on wrong thread

Alarms from btu_bta_alarm_queue and btu_generic_alarm_queue should be
processed on the main MessageLoop thread.
Replaced obsoleted alarm_set_on_queue() alarm API with the new
alarm_set_on_mloop() API

Test: manual
Bug: 65078753
Change-Id: I54b472b39b44a6c541dbdcdad7414056d0dd4163
Merged-In: I54b472b39b44a6c541dbdcdad7414056d0dd4163
(cherry picked from commit 01a63882)
parent 1c98c481
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@
#define BTA_AG_DEBUG FALSE
#endif

extern fixed_queue_t* btu_bta_alarm_queue;

#if (BTA_AG_DEBUG == TRUE)
static char* bta_ag_evt_str(uint16_t event, tBTA_AG_RES result);
static char* bta_ag_state_str(uint8_t state);
@@ -545,9 +543,8 @@ void bta_ag_collision_cback(UNUSED_ATTR tBTA_SYS_CONN_STATUS status, uint8_t id,
      bta_ag_start_servers(p_scb, p_scb->reg_services);

    /* Start timer to han */
    alarm_set_on_queue(p_scb->collision_timer, BTA_AG_COLLISION_TIMEOUT_MS,
                       bta_ag_collision_timer_cback, p_scb,
                       btu_bta_alarm_queue);
    alarm_set_on_mloop(p_scb->collision_timer, BTA_AG_COLLISION_TIMEOUT_MS,
                       bta_ag_collision_timer_cback, p_scb);
  }
}

+3 −5
Original line number Diff line number Diff line
@@ -47,8 +47,6 @@
#define BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS (3 * 1000) /* 3 seconds */
#endif

extern fixed_queue_t* btu_bta_alarm_queue;

#if (BTA_AG_SCO_DEBUG == TRUE)
static char* bta_ag_sco_evt_str(uint8_t event);
static char* bta_ag_sco_state_str(uint8_t state);
@@ -558,9 +556,9 @@ void bta_ag_codec_negotiate(tBTA_AG_SCB* p_scb) {
    bta_ag_send_bcs(p_scb, NULL);

    /* Start timer to handle timeout */
    alarm_set_on_queue(
        p_scb->codec_negotiation_timer, BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS,
        bta_ag_codec_negotiation_timer_cback, p_scb, btu_bta_alarm_queue);
    alarm_set_on_mloop(p_scb->codec_negotiation_timer,
                       BTA_AG_CODEC_NEGOTIATION_TIMEOUT_MS,
                       bta_ag_codec_negotiation_timer_cback, p_scb);
  } else {
    /* use same codec type as previous SCO connection, skip codec negotiation */
    APPL_TRACE_DEBUG(
+4 −6
Original line number Diff line number Diff line
@@ -58,8 +58,6 @@
#define BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS (2 * 1000) /* 2 seconds */
#endif

extern fixed_queue_t* btu_bta_alarm_queue;

static void bta_av_accept_signalling_timer_cback(void* data);

#ifndef AVRC_MIN_META_CMD_LEN
@@ -1429,10 +1427,10 @@ void bta_av_sig_chg(tBTA_AV_DATA* p_data) {
            /* Possible collision : need to avoid outgoing processing while the
             * timer is running */
            p_cb->p_scb[xx]->coll_mask = BTA_AV_COLL_INC_TMR;
            alarm_set_on_queue(p_cb->accept_signalling_timer,
            alarm_set_on_mloop(p_cb->accept_signalling_timer,
                               BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS,
                               bta_av_accept_signalling_timer_cback,
                               UINT_TO_PTR(xx), btu_bta_alarm_queue);
                               UINT_TO_PTR(xx));
          }
          break;
        }
@@ -1548,10 +1546,10 @@ static void bta_av_accept_signalling_timer_cback(void* data) {
          /* We are still doing SDP. Run the timer again. */
          p_scb->coll_mask |= BTA_AV_COLL_INC_TMR;

          alarm_set_on_queue(p_cb->accept_signalling_timer,
          alarm_set_on_mloop(p_cb->accept_signalling_timer,
                             BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS,
                             bta_av_accept_signalling_timer_cback,
                             UINT_TO_PTR(inx), btu_bta_alarm_queue);
                             UINT_TO_PTR(inx));
        } else {
          /* SNK did not start signalling, resume signalling process. */
          bta_av_discover_req(p_scb, NULL);
+15 −18
Original line number Diff line number Diff line
@@ -248,7 +248,6 @@ const tBTM_APPL_INFO bta_security = {&bta_dm_authorize_cback,
uint8_t g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF];

extern DEV_CLASS local_device_default_class;
extern fixed_queue_t* btu_bta_alarm_queue;

/*******************************************************************************
 *
@@ -509,16 +508,14 @@ void bta_dm_disable(UNUSED_ATTR tBTA_DM_MSG* p_data) {
     */
    APPL_TRACE_WARNING("%s BTA_DISABLE_DELAY set to %d ms", __func__,
                       BTA_DISABLE_DELAY);
    alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DISABLE_DELAY,
                       bta_dm_disable_conn_down_timer_cback, NULL,
                       btu_bta_alarm_queue);
    alarm_set_on_mloop(bta_dm_cb.disable_timer, BTA_DISABLE_DELAY,
                       bta_dm_disable_conn_down_timer_cback, NULL);
#else
    bta_dm_disable_conn_down_timer_cback(NULL);
#endif
  } else {
    alarm_set_on_queue(bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_MS,
                       bta_dm_disable_timer_cback, UINT_TO_PTR(0),
                       btu_bta_alarm_queue);
    alarm_set_on_mloop(bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_MS,
                       bta_dm_disable_timer_cback, UINT_TO_PTR(0));
  }
}

@@ -554,9 +551,9 @@ static void bta_dm_disable_timer_cback(void* data) {
       need
        to be sent out to avoid jave layer disable timeout */
    if (trigger_disc) {
      alarm_set_on_queue(
          bta_dm_cb.disable_timer, BTA_DM_DISABLE_TIMER_RETRIAL_MS,
          bta_dm_disable_timer_cback, UINT_TO_PTR(1), btu_bta_alarm_queue);
      alarm_set_on_mloop(bta_dm_cb.disable_timer,
                         BTA_DM_DISABLE_TIMER_RETRIAL_MS,
                         bta_dm_disable_timer_cback, UINT_TO_PTR(1));
    }
  } else {
    bta_dm_cb.disabling = false;
@@ -1769,9 +1766,9 @@ void bta_dm_search_result(tBTA_DM_MSG* p_data) {
  } else {
    /* wait until link is disconnected or timeout */
    bta_dm_search_cb.sdp_results = true;
    alarm_set_on_queue(bta_dm_search_cb.search_timer,
    alarm_set_on_mloop(bta_dm_search_cb.search_timer,
                       1000 * (L2CAP_LINK_INACTIVITY_TOUT + 1),
                       bta_dm_search_timer_cback, NULL, btu_bta_alarm_queue);
                       bta_dm_search_timer_cback, NULL);
  }
}

@@ -3081,9 +3078,9 @@ void bta_dm_acl_change(tBTA_DM_MSG* p_data) {
         * Start a timer to make sure that the profiles
         * get the disconnect event.
         */
        alarm_set_on_queue(
            bta_dm_cb.disable_timer, BTA_DM_DISABLE_CONN_DOWN_TIMER_MS,
            bta_dm_disable_conn_down_timer_cback, NULL, btu_bta_alarm_queue);
        alarm_set_on_mloop(bta_dm_cb.disable_timer,
                           BTA_DM_DISABLE_CONN_DOWN_TIMER_MS,
                           bta_dm_disable_conn_down_timer_cback, NULL);
      }
    }
    if (conn.link_down.is_removed) {
@@ -3319,9 +3316,9 @@ static void bta_dm_adjust_roles(bool delay_role_switch) {
            BTM_SwitchRole(bta_dm_cb.device_list.peer_device[i].peer_bdaddr,
                           HCI_ROLE_MASTER, NULL);
          } else {
            alarm_set_on_queue(
                bta_dm_cb.switch_delay_timer, BTA_DM_SWITCH_DELAY_TIMER_MS,
                bta_dm_delay_role_switch_cback, NULL, btu_bta_alarm_queue);
            alarm_set_on_mloop(bta_dm_cb.switch_delay_timer,
                               BTA_DM_SWITCH_DELAY_TIMER_MS,
                               bta_dm_delay_role_switch_cback, NULL);
          }
        }
      }
+2 −5
Original line number Diff line number Diff line
@@ -35,8 +35,6 @@
#include "bta_sys.h"
#include "btm_api.h"

extern fixed_queue_t* btu_bta_alarm_queue;

static void bta_dm_pm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id,
                            uint8_t app_id, const RawAddress& peer_addr);
static void bta_dm_pm_set_mode(const RawAddress& peer_addr,
@@ -285,9 +283,8 @@ static void bta_dm_pm_start_timer(tBTA_PM_TIMER* p_timer, uint8_t timer_idx,
  p_timer->srvc_id[timer_idx] = srvc_id;
  state_lock.unlock();

  alarm_set_on_queue(p_timer->timer[timer_idx], timeout_ms,
                     bta_dm_pm_timer_cback, p_timer->timer[timer_idx],
                     btu_bta_alarm_queue);
  alarm_set_on_mloop(p_timer->timer[timer_idx], timeout_ms,
                     bta_dm_pm_timer_cback, p_timer->timer[timer_idx]);
}

/*******************************************************************************
Loading