Make sure the listen is always cancelled after the lock in write and assemble
Make sure the listen is always cancelled after the lock in write and assemble

When assembly is needed, sometimes the operation might time out before
the assembly is completed, and resulting in the end listen not being
called because listen result will not be nil.

avtr/bluejay,avtr/bluejay,avtr/bluejay