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

Tim Wilson-Brown edited comment on THRIFT-749 at 4/2/10 4:50 AM:
-----------------------------------------------------------------

In the generated code I have from Thrift r760184, the sequence is:

  oprot_->writeMessageEnd();
  oprot_->getTransport() ->flush();
  oprot_->getTransport() ->writeEnd();

writeEnd() is a no-op in most transports, but where it is implemented 
(TPipedTransport), it does its own flush.

I wasn't aware of the flush in the processor - sorry for taking up your time.

There is no compelling issue - this was one potential cause of some issues I'm 
having with Thrift and fork.
The proven causes are [THRIFT-747] and [THRIFT-748].

      was (Author: twilsonb):
    In the generated code I have from Thrift r760184, the sequence is:

  oprot_->writeMessageEnd();
  oprot_->getTransport()->flush();
  oprot_->getTransport()->writeEnd();

writeEnd() is a no-op in most transports, but where it is implemented 
(TPipedTransport), it does its own flush.

I wasn't aware of the flush in the processor - sorry for taking up your time.

There is no compelling issue - this was one potential cause of some issues I'm 
having with Thrift and fork.
The proven causes are [THRIFT-747] and [THRIFT-748].
  
> C++ TBufferedTransports do not flush their buffers on delete
> ------------------------------------------------------------
>
>                 Key: THRIFT-749
>                 URL: https://issues.apache.org/jira/browse/THRIFT-749
>             Project: Thrift
>          Issue Type: Bug
>          Components: Library (C++)
>    Affects Versions: 0.2, 0.3
>         Environment: Cygwin 1.7.1 on Windows XP SP3, Thrift 0.2.0 & r760184 & 
> Trunk 
>            Reporter: Tim Wilson-Brown
>            Priority: Trivial
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> Edit: replaced 'close underlying transport' with 'flush buffers'
> The C++ TBufferedTransports (such as TBufferedTransport) do not flush their 
> buffers on delete.
> The workaround is to manually flush the TBufferedTransport before deleting 
> it. If the TBufferedTransport owned the last instance of the underlying 
> transport, it will be deleted and close itself.
> This may be worth fixing - at the moment, substituting a buffered TSocket for 
> an unbuffered one changes the behaviour on delete.
> Data may be buffered then lost when the TBufferedTransport is deleted.
> This is undesirable  - they should behave identically except for the 
> buffering.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to