Good catch! In this case there is no reason to distingish the channel being non-writable with other errors, since the actual error situation is expected to be returned in errno anyway in both cases. It looks like an ancient copy/paste error, since a lot of other functions where CheckChannelErrors() is used return -1 for error.

Therefore: agreed with the analyses. Should be fixed now in core-8-6-branch and trunk.

Thanks!