
❦ 4 avril 2018 17:00 +0200, Vincent Bernat <bernat@luffy.cx> :
You can do that locally, but as a patch it's very unlikely to be accepted upstream because we've introduced RW locks to be able to access domain list from multiple threads.
Looking a bit more, the whole "iterating" bit is currently unsafe. First, it is racy since it's "check then take". Two threads may check the value is false and start iterating both. Moreover, at some places, it is not set, for example in virHashAddOrUpdateEntry(). So, it would be possible to call this function and during the update to iterate over the hash. This seems to be prevented only by callers using RW lock. So, it seems we can just remove this "iterating" bool and just check all users of these functions are using the appropriate lock.
My bad, I didn't see the use of table->current...
It seems it can also go away if caller correctly use a RW lock. I am currently testing the attached patch on a few servers (patch for master, but applied on our 3.6 version). After checking many locations, I came to conclusion that locks are used correctly. -- Use library functions. - The Elements of Programming Style (Kernighan & Plauger)