Skip to content

Fix race condition in reusable statements

Carlos Garnacho requested to merge wip/carlosg/timeouts-and-stuff into master

From the main commit:

This function used to operate 100% on readonly data, so could be safely
used from multiple threads. This is however no longer true since commit
af97cede, which might result in TrackerSparql churning again to
re-parse the SPARQL into SQL.

Moreover, as this was not an atomic operation (far from it), the same
TrackerSparql could trigger independently this re-parsing, or surprise
older users with data going down their feet. This could produce anything
from wrong results, to invalid reads/writes, to crashes.

Protect the whole thing with a mutex, so it is ensured it's only rebuilt
in one thread, and other users don't get surprised by it.

It's likely to be a source for some of the weird things we were seeing on CI.

Edited by Carlos Garnacho

Merge request reports