[
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)