From c2eeefe7d48a7809b0e2c1aa7b4c6f78605159b9 Mon Sep 17 00:00:00 2001 From: Evan Chu Date: Mon, 24 Jun 2013 12:48:18 -0400 Subject: 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 --- src/gki/common/gki_buffer.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/gki') 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; } -- cgit v1.2.3