Depends on D8332
I am not sure here, what if we have a then attached to something which is already dispatched. But in the callback the promise is dispatched again, shouldn't this just jump to the end and execute f = _eina_future_free(f) and continue the loop just like normal ?
So future are in a chained list structure. You can have triggered one at the beginning of that chain, but somewhere in the wonderful world of asynchronous mess and callback, someone may have decided to cancel another or the same future. The future that has been already dispatched will proceed and need to proceed with the rest of the chain it has started on already (especially the next one as I really can't find a way to destroy the next future, not the one that is already dispatched, without crashing everything ). This is why I do not free the already dispatched one and also stop destroying the world.