3d7b84a598
The datasource cache was taking an exclusive lock on the simple mutex used to protect the singleton's data pointer. This works okay when everyone always calls it non-recursively, but when the recursive flag is true then it will always deadlock when called on any directory with subdirectories. Additionally, many methods which accessed private data members of the cache were not protected by any locks. Since the call pattern of registering datasources is strictly tree-shaped then it's a good candidate for a recursive mutex. This has a slightly higher overhead than a simple mutex, so rather than change the singleton's mutex to be recursive, I've added a new instance mutex to the datasource cache. Also, added a very basic test which reproduces the problem and shows that it's fixed with this patch. |
||
---|---|---|
.. | ||
data@cb1e7f2ed8 | ||
data-visual@886655410c | ||
standalone | ||
unit | ||
visual | ||
build.py | ||
catch.hpp | ||
cleanup.hpp | ||
run |