In some special cases it is possible to detect if a STM transaction blocks indefinitely so we can abort here.
Low level stm datastructure which can be used to efficiently implement other datastructures like Map/Set on top.