commit | a16ac3f7f5700cd52fc98d347583072f49fb6f3f | [log] [tgz] |
---|---|---|
author | Chienyuan <chienyuanhuang@google.com> | Fri Mar 29 17:33:41 2019 -0700 |
committer | Chienyuan <chienyuanhuang@google.com> | Wed Apr 03 17:57:29 2019 -0700 |
tree | fc7b3b39985db99a0201a01e9c6fefe0879f176b | |
parent | 5164782711afbd7c11f6212ff0434e70811ba927 [diff] |
Fix memory leak of reactor and reactor_unittest * Fix memory leak happen in below two cases Case 1 1. Reactable1 register 2. Reactable2 register 3. Reactable2 unregister during the callback event of Reactable2 4. Reactable1 unregister In step 3, reactable_removed_ will set to true due to unregister while reactable->is_executing_ is true, it makes sure we delete Reactable2 after the callback is executed. But it will cause Reactable1 to not be deleted in step 4. To avoid this, we can reset reactable_removed_ to false after Reactable deleted. Case 2 1. Reactable1 register 2. Reactable2 register 3. Reactable2 unregister during the callback event of Reactable2 4. Reactable1 unregister from different thread during step 3 processing In step 3, although we reset reactable_removed_ to false after Reactable2 deleted immediately for case 1, if other thread unregister Reactable1 before Reactable2 deleted, Reactable1 will fail to be deleted. To avoid thie, we add a local variable to check if the Reacable is executing. If not, deleted the Reactable directly. * Add unittest for these two cases * Fix memory leak in reactor_unittest * Turn on cfi and address flag Test: sudo ./bluetooth_test_gd Change-Id: I0a0ca79b439fd3a1bf3ec0fa2b2a43a88e037fbb
Just build AOSP - Fluoride is there by default.
Instructions for Ubuntu, tested on 14.04 with Clang 3.5.0 and 16.10 with Clang 3.8.0
mkdir ~/fluoride cd ~/fluoride git clone https://android.googlesource.com/platform/packages/modules/Bluetooth/system
Install dependencies (require sudo access):
cd ~/fluoride/bt build/install_deps.sh
Then fetch third party dependencies:
cd ~/fluoride/bt mkdir third_party cd third_party git clone https://github.com/google/googletest.git git clone https://android.googlesource.com/platform/external/aac git clone https://android.googlesource.com/platform/external/libchrome git clone https://android.googlesource.com/platform/external/libldac git clone https://android.googlesource.com/platform/external/modp_b64 git clone https://android.googlesource.com/platform/external/tinyxml2
And third party dependencies of third party dependencies:
cd fluoride/bt/third_party/libchrome/base/third_party mkdir valgrind cd valgrind curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/valgrind.h?format=TEXT | base64 -d > valgrind.h curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/memcheck.h?format=TEXT | base64 -d > memcheck.h
NOTE: If packages/modules/Bluetooth/system is checked out under AOSP, then create symbolic links instead of downloading sources
cd packages/modules/Bluetooth/system mkdir third_party cd third_party ln -s ../../../external/aac aac ln -s ../../../external/libchrome libchrome ln -s ../../../external/libldac libldac ln -s ../../../external/modp_b64 modp_b64 ln -s ../../../external/tinyxml2 tinyxml2 ln -s ../../../external/googletest googletest
cd ~/fluoride/bt gn gen out/Default
cd ~/fluoride/bt ninja -C out/Default all
This will build all targets (the shared library, executables, tests, etc) and put them in out/Default. To build an individual target, replace "all" with the target of your choice, e.g. ninja -C out/Default net_test_osi
.
cd ~/fluoride/bt/out/Default LD_LIBRARY_PATH=./ ./bluetoothtbd -create-ipc-socket=fluoride
Follows the Chromium project Eclipse Setup Instructions until "Optional: Building inside Eclipse" section (don't do that section, we will set it up differently)
Generate Eclipse settings:
cd packages/modules/Bluetooth/system gn gen --ide=eclipse out/Default
In Eclipse, do File->Import->C/C++->C/C++ Project Settings, choose the XML location under packages/modules/Bluetooth/system/out/Default
Right click on the project. Go to Preferences->C/C++ Build->Builder Settings. Uncheck "Use default build command", but instead using "ninja -C out/Default"
Goto Behaviour tab, change clean command to "-t clean"