an empty value is not an error condition

also the mutex is always acquired when touching the 'fetch_error' member
so there is no need to use the atomic builtins (which in this case
were also redundant)
call the eof callback or release the async_read context
if the filedescriptor is invalid or the call to iomux_add() fails