AthenaKernel: RCUObject updates
-
Improve RCUObject so that frequent updates will not prevent old objects from ever being deleted. We now distinguish
current' and
old' objects. When we add a new object for deletion and there are some pending current objects but no pending old objects, we change the current objects to old. The grace mask for these objects does not change, so their deletion is not affected by the addition of new pending objects. -
We can now create a RCUObject without having to create a payload object instance as well. This is useful if the RCUObject is being used only to manage deletion of objects owned somewhere else.
-
Add an atomic flag true if there are any objects pending deletion. This allows us to skip taking the lock when quiesce() is called from RCUSvc in the common case that there is no work to do.