summaryrefslogtreecommitdiff
path: root/src/gki
diff options
context:
space:
mode:
authorEvan Chu <evanchu@broadcom.com>2013-06-24 12:48:18 -0400
committerMartijn Coenen <maco@google.com>2013-08-05 08:56:45 -0700
commitc2eeefe7d48a7809b0e2c1aa7b4c6f78605159b9 (patch)
tree6444c3239fc78393d4c538a3a375a3acb49c98b3 /src/gki
parent91ada91fa991b4df5372a19a2cf81f074b298712 (diff)
downloadlibnfc-nci-c2eeefe7d48a7809b0e2c1aa7b4c6f78605159b9.tar.gz
Fix deadlock in GKI_getbuf when out of buffer.
By Kevin Park. GKI_getbuf is executed in critical section. Sometimes, when GKI getbuf fails due to low memory, code logic in GKI_getbuf just returns NULL without releasing lock. This introduces deadlock situation. So fixed the code to call GKI_enable before returning. Increasing GKI buf pool size for the specific condition like system very busy on first boot. Change-Id: I8c7de8d0f472f5dfa41a43c08c30025de4e073c4
Diffstat (limited to 'src/gki')
-rw-r--r--src/gki/common/gki_buffer.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/gki/common/gki_buffer.c b/src/gki/common/gki_buffer.c
index 10a816a..555bc4b 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.c
@@ -407,6 +407,7 @@ void *GKI_getbuf (UINT16 size)
if(Q->p_first == 0 && gki_alloc_free_queue(i) != TRUE)
{
GKI_TRACE_ERROR_0("GKI_getbuf() out of buffer");
+ GKI_enable();
return NULL;
}
#endif
@@ -415,6 +416,7 @@ void *GKI_getbuf (UINT16 size)
{
/* gki_alloc_free_queue() failed to alloc memory */
GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+ GKI_enable();
return NULL;
}