commit a4a4e4216c8b7ca06bfe1d5ceeaecd54abc1a7d1
Author: James Hobin <hobinjk@gmail.com>
Fixes issue where LogShake would race in its reading code. Adds basic test
which should detect this specific race condition.
The LogShake features allows one to shake its device to be able to dump
a set of useful logging informations. This includes several log files,
and also the Android properties. In the past, we relied on the
/dev/__properties__ file to extract their content by parsing its value.
This is duplicate work from the bionic libc and libcutils library.
Worst, the format used to store the values in this file has been changed
between JellyBean and Kitkat, so our parser was not able to dump the
values: that explains bug 1079322. To fix this we make use of some of
the underlying libc-defined functions used to iterate and get properties
values:
- __system_property_find_nth() to retrieve one arbitrary property by
its number (starting from 0), and this returns a struct containing
all the informations
- __system_property_read() to read the values contained in the struct
that was previously retrieved
In the event of broken/unexpected things, we would like to have even a
partial log set dump. This happens for parsing properties values on
Kitkat builds: the current code does all the parsing itself, but the
format of storage of properties evolved with Kitkat base system, and
this makes LogParser to fail, as documented in bug 1079322. Even if we
miss some values, it can still be useful to have the other remaining
ones.