On Mon, Jan 06, 2014 at 12:34:32PM +0100, Richard Braun wrote: > > +static struct rbtree futex_tree; > > http://lists.gnu.org/archive/html/bug-hurd/2013-12/msg00545.html : > "Personally, I'd use a per-task red-black tree". > ^^^^^^^^ > > http://lists.gnu.org/archive/html/bug-hurd/2013-12/msg00546.html : > "To finish with, the more I think about it, the less I understand why > there is a need for futex objects in the first place. Instead of > dynamically allocating such structures, it probably makes more sense > to use the addresses of the physical page descriptors instead." > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
After some thinking, this would actually not work, as physical pages can be paged out. You can use a (VM object, offset) pair instead, but you have to deal with private futexes, which should probably use a (VM map, address) pair. So, you actually need a global, shared container for process shared futexes, and per-task containers for private ones. We also need to make sure nothing bad happens to an (object, offset) pair when, say, copy-on-write is performed by the VM system... All this looks quite tricky to me, and certainly not a "small hack entry" :-/. -- Richard Braun