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