bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#10616: flush procedure for soft ports isn't called


From: Mark H Weaver
Subject: bug#10616: flush procedure for soft ports isn't called
Date: Thu, 08 Mar 2012 10:39:31 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux)

address@hidden (Ludovic Courtès) writes:

> Ian Price <address@hidden> skribis:
>
>>  
>> -  if (pt->write_pos > pt->write_buf)
>> -    {
>> -      /* write the byte. */
>> -      scm_call_1 (SCM_SIMPLE_VECTOR_REF (stream, 0),
>> -              SCM_MAKE_CHAR (*pt->write_buf));
>> -      pt->write_pos = pt->write_buf;
>> -  
>> -      /* flush the output.  */
>> -      {
>> -    SCM f = SCM_SIMPLE_VECTOR_REF (stream, 2);
>> +  SCM f = SCM_SIMPLE_VECTOR_REF (stream, 2);
>> +
>> +  if (scm_is_true (f))
>> +    scm_call_0 (f);
>>  
>> -    if (scm_is_true (f))
>> -      scm_call_0 (f);
>> -      }
>> -    }
>>  }
>
> It’s a bit late to reply (sorry, Ian!), but the reason it took me so
> long, is that I wanted to understand the rationale for the ‘if’, and the
> implications of dropping it (which I never got around to, as you can
> see.  ;-))
>
> Mark: what’s your take on this?  I’m especially concerned with
> undesirable side effects in user code.

I searched libguile for occurrences of 'write_pos' and 'write_buf', and
convinced myself that Ian's analysis was indeed correct.  The write
buffer is not used by the core ports code.  Writes are forwarded
directly to the write function of the specific port type, which may use
the write buffer if it wishes to, but need not.  The write buffer is
used only by certain types of ports: currently string ports and file
ports.  It is not used by soft ports.

    Thanks,
      Mark





reply via email to

[Prev in Thread] Current Thread [Next in Thread]