cppTango 9.3.0 and 9.3.1: Issue with dynamic attributes
A problem has been observed with cppTango 9.3.0 and 9.3.1 in device servers using dynamic attributes. This could prevent some device servers invoking add_dynamic_attributes() in the init_device() for instance to start up correctly (invoking add_dynamic_attributes() in the init_device() is usually a bad idea since the device_factory method will erase them immediately after and invoke again add_dynamic_attributes(), but this was an easy way to show the problem. The problem can occur as well when restarting a device on a typically well written device server using dynamic attributes). A new map to improve performances has been added in #430 but the old vector was kept to maintain the compatibility with the older versions. The index in the vector is now stored as well in the map to improve the performances of get_attr_ind_by_name() method but these indexes are not correctly updated in some cases (typically when an attribute is removed). Moreover, there is a trick in the way the attribute list vector is created and maintained, state and status attributes must always be at the end of the vector. This was forgotten in #430.