OSDN Git Service

Start listener thread only after successful open call
authorSrinu Jella <sjella@codeaurora.org>
Fri, 22 Jan 2016 12:19:15 +0000 (17:49 +0530)
committerSrinu Jella <sjella@codeaurora.org>
Wed, 16 Mar 2016 13:26:29 +0000 (18:56 +0530)
Use case: Stress tests ON\OFF with different concurrent
scenarios

Failure: Crash in btsnoop_net_listen thread

Root cause: While starting and shutting down the module
we are calling same function update_logging(). While at
the start it is creating listen thread and throwing error
and exiting without closing the listen thread. While
shutdown of module it "should_log" matches with "is_logging"
and it considers cleanup is not required and returns,
leaving Behind the listen thread open. In the next BT ON,
another listen thread is created and causes the crash.

Fix: Started listener thread after prerequisite operations
are successful.

Change-Id: I92ef293d9b061d0ea65a0c41b506870152114bb0

hci/src/btsnoop.c

index 50df910..ddeb7a9 100644 (file)
@@ -158,8 +158,6 @@ static void update_logging() {
 
   is_logging = should_log;
   if (should_log) {
-    btsnoop_net_open();
-
     const char *log_path = stack_config->get_btsnoop_log_path();
 
     // Save the old log if configured to do so
@@ -179,6 +177,7 @@ static void update_logging() {
     }
 
     write(logfile_fd, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16);
+    btsnoop_net_open();
   } else {
     if (logfile_fd != INVALID_FD)
       close(logfile_fd);