Dehong reported the following bug:
In order to convert between legacy and more 'modern' representation of
data with at least DBR_STATUS auxiliary information
db_access.c: db_get_field_and_count()
calls dbGetField() twice; a first time to retrieve the auxiliary
information
(status, timestamps, ...) and a second time to fetch data.
Since the underlying record is not locked across the two calls to
dbGetField()
the record could be processed in between and render the auxiliary data
invalid/obsolete.
Proposed fix:
AFAIK, dbScanLock() supports recursion and therefore the easiest
fix would be acquiring the record lock within db_get_field_and_count()
RFC
- Till
PS: the bug seems to still be present in the 3.14 branch head