[IoContext] do not use Future after allowing its destruction

When using the SINGLE_URING configuration the Future semaphore is used
to ensure that a forgotten Future is dropped after it is prepared and
not needed anymore.

Using the future after signaling its semaphore and thus allowing its
concurrent destruction is obviously broken.

Signal the semaphore after all preparation work is done.

Fixes: 9c0f2143
52 jobs for fix-cancel-on-single-uring in 18 minutes and 32 seconds (queued for 4 seconds)