OSDN Git Service

Revert "Revert "Avoid double memory free and crash during LE discovery or disconnect""
authorPavlin Radoslavov <pavlin@google.com>
Fri, 29 Jan 2016 06:46:31 +0000 (22:46 -0800)
committerPavlin Radoslavov <pavlin@google.com>
Fri, 29 Jan 2016 06:51:00 +0000 (22:51 -0800)
The revert includes a compilation fix as well
(missing include of a header file).

This reverts commit 3a4082d7af5c5941769c700d774022a9b982d45c.

Change-Id: I5bb1f468d2c64839037afe5ed2d3ed5d1b21dca2

bta/gatt/bta_gattc_act.c
bta/gatt/bta_gattc_utils.c

index a9b9cd1..0005be9 100644 (file)
@@ -34,6 +34,7 @@
 #include "bt_common.h"
 #include "l2c_api.h"
 #include "osi/include/log.h"
+#include "stack/l2cap/l2c_int.h"
 #include "utl.h"
 
 #if (defined BTA_HH_LE_INCLUDED && BTA_HH_LE_INCLUDED == TRUE)
@@ -1064,8 +1065,10 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
     else if (p_q_cmd != NULL)
     {
         p_clcb->p_q_cmd = NULL;
-
-        bta_gattc_sm_execute(p_clcb, p_q_cmd->hdr.event, p_q_cmd);
+        /* execute pending operation of link block still present */
+        if (l2cu_find_lcb_by_bd_addr(p_clcb->p_srcb->server_bda, BT_TRANSPORT_LE) != NULL) {
+            bta_gattc_sm_execute(p_clcb, p_q_cmd->hdr.event, p_q_cmd);
+        }
         /* if the command executed requeued the cmd, we don't
          * want to free the underlying buffer that's being
          * referenced by p_clcb->p_q_cmd
index 539d2a7..a8c4ac3 100644 (file)
@@ -440,17 +440,15 @@ tBTA_GATTC_SERV * bta_gattc_srcb_alloc(BD_ADDR bda)
 BOOLEAN bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
 {
 
- if (p_clcb->p_q_cmd == NULL)
- {
-     p_clcb->p_q_cmd = p_data;
- }
- else
- {
-     APPL_TRACE_ERROR("already has a pending command!!");
-     /* skip the callback now. ----- need to send callback ? */
- }
- return (p_clcb->p_q_cmd != NULL) ? TRUE : FALSE;
+    if (p_clcb->p_q_cmd == NULL)
+    {
+        p_clcb->p_q_cmd = p_data;
+        return TRUE;
+    }
 
+    APPL_TRACE_ERROR ("%s: already has a pending command!!", __func__);
+    /* skip the callback now. ----- need to send callback ? */
+    return FALSE;
 }
 
 /*******************************************************************************