summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSrinu Jella <sjella@codeaurora.org>2015-12-24 17:40:52 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-02-16 05:00:33 -0800
commitdbf76f87acca8946983982335c0b09df9f49414e (patch)
tree8476f69fd4778fdf30788775e259b7968909a4db
parentb20358ca321f22ab073cf2107fef299017943de4 (diff)
downloadandroid_system_bt-dbf76f87acca8946983982335c0b09df9f49414e.tar.gz
android_system_bt-dbf76f87acca8946983982335c0b09df9f49414e.tar.bz2
android_system_bt-dbf76f87acca8946983982335c0b09df9f49414e.zip
Bluetooth: Offload config save functionality to btif thread
Offload config save functionality to btif thread from timer thread as timer callback thread is critical in a2dp playback case. If the timer callback thread is busy in config save due to IO operations, it may lead to a2dp audio choppy. Fix to avoid the "bt_config.conf" file corruption from the file system. This will avoid losing the paired information in some corner case, such as abrupt power off and on. This patch will ensure bt_config is saved to NVRAM. CRs-Fixed: 953993 Change-Id: I893e9afefa89cbab6e7ddd8835ca77d3e316874c
-rw-r--r--btif/src/btif_config.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c
index aad4fa6b9..c41314d1b 100644
--- a/btif/src/btif_config.c
+++ b/btif/src/btif_config.c
@@ -44,7 +44,7 @@ static const char *LEGACY_CONFIG_FILE_PATH = "/data/misc/bluedroid/bt_config.xml
static const period_ms_t CONFIG_SETTLE_PERIOD_MS = 3000;
static void timer_config_save_cb(void *data);
-static void btif_config_write(void);
+static void btif_config_write(UINT16 event, char *p_param);
static void btif_config_devcache_cleanup(void);
// TODO(zachoverflow): Move these two functions out, because they are too specific for this file
@@ -360,7 +360,10 @@ void btif_config_flush(void) {
alarm_cancel(alarm_timer);
- btif_config_write();
+ btif_config_write(0, NULL);
+ pthread_mutex_lock(&lock);
+ config_flush(CONFIG_FILE_PATH);
+ pthread_mutex_unlock(&lock);
}
int btif_config_clear(void){
@@ -384,10 +387,13 @@ int btif_config_clear(void){
}
static void timer_config_save_cb(UNUSED_ATTR void *data) {
- btif_config_write();
+ // calling file IO onto btif context instead of timer callback because
+ // it usually takes lots of time to be completed timer callback has big
+ // delayed during a2dp playback causing blip or choppiness.
+ btif_transfer_context(btif_config_write, 0, NULL, 0, NULL);
}
-static void btif_config_write(void) {
+static void btif_config_write(UNUSED_ATTR UINT16 event, UNUSED_ATTR char *p_param) {
assert(config != NULL);
assert(alarm_timer != NULL);