[ 
https://issues.apache.org/jira/browse/THRIFT-3791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15247804#comment-15247804
 ] 

Kyle Johnson commented on THRIFT-3791:
--------------------------------------

It's not necessary to test IsOpen because it is tested right at the beginning 
of ReadDirect().  Furthermore, it's not necessary during the PeekNamedPipe loop 
because the status of IsOpen cannot change while looking for data, assuming the 
code isn't meant to be used by multiple threads concurrently.  If it *is* 
expected that the code is to be thread safe (which it is nowhere near thread 
safe currently), then it would be necessary to add some sort of exclusivity 
check around all pipe operations that utilize a handle, which isn't done 
currently.

> Delphi pipe client may fail even in a non-error condition
> ---------------------------------------------------------
>
>                 Key: THRIFT-3791
>                 URL: https://issues.apache.org/jira/browse/THRIFT-3791
>             Project: Thrift
>          Issue Type: Bug
>          Components: Delphi - Library
>    Affects Versions: 1.0
>            Reporter: Kyle Johnson
>            Assignee: Jens Geyer
>         Attachments: 
> THRIFT-3791-fix-for-calling-GetLastError-even-on-success.patch
>
>
> In TPipeStreamBase.ReadDirect(), the code performs a peek on the pipe.  If no 
> data is available (bytes = 0), GetLastError is still checked, even though 
> Microsoft documentation clearly states that not all functions set the last 
> error code to 0 on success 
> (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx).
>   Furthermore, because PeekNamedPipe only mentions that GetLastError should 
> be called on failure, the logic of the if test must be changed.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to