[fpc-pascal] XML Registry Bug?

Tony Whyman tony.whyman at mccallumwhyman.com
Wed Jan 20 15:35:46 CET 2016


I came across this trying to track down a bug in a linux program where 
two separate instances of TRegistry were being used to both read and 
write data to the registry. Depending on the order in which operations 
were done, writes were being lost and not turning up in the XML file. 
The outcome is even more unpredictable when the TRegistry instances are 
owned by multiple threads.

Digging deeper, the problem seems to be that:

a) Each TRegistry instance creates its own TXMLRegistry object.

b) When the TXMLRegistry is created, it loads the XML File into memory.

c) Where a key is closed, the cached data is written back (flushed), but 
never refreshed.

The result is that with each TRegistry instance caching its own copy, 
every time a key is closed, the updates from the other instances are 
overwritten.

This seems to be a bug to me as there is nothing to say that you should 
only have one TRegistry instance at any one time.

The obvious fix seems to be for there to be a single instance of 
TXMLRegistry shared between all instances of TRegistry - or at least one 
TXMLRegistry for use when GlobalXMLFile is true and another for when 
GlobalXMLFile is false.

Is there a good reason not to propose this as a bug fix?

Tony Whyman
MWA



More information about the fpc-pascal mailing list