win: cause uv_read_stop to immediately stop reading the stream

this implements locking around the blocking call to ReadFile to get
around a Windows kernel bug where a blocking ReadFile operation on a
stream can deadlock the thread. this allows uv_read_stop to immediately
cancel a pending IO operation, and allows uv_pipe_getsockname to
"pause" any pending read (from libuv) while it retrieves the
sockname information

if unsupported by the OS (pre-Vista), this reverts to the old
(e.g. deadlock-prone) behavior

ref. issue #1313
On 08/05/2014 02:44 AM, Jameson Nash wrote:
> In src/win/pipe.c:
> 
>>    return 0;
>>  
>>  error:
>> -  free(name_info);
>> +  if (name_info) {
> 
> we can now get here from |UV_ENOMEM|, when |name_info| is NULL. I could
> make separate |error1| and |error2| labels?
> 

free(NULL) is kosher, no need to handle it.


-- 
Saúl Ibarra Corretgé
bettercallsaghul.com