[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#10616: flush procedure for soft ports isn't called
From: |
Ludovic Courtès |
Subject: |
bug#10616: flush procedure for soft ports isn't called |
Date: |
Sat, 10 Mar 2012 23:14:39 +0100 |
User-agent: |
Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.93 (gnu/linux) |
Hi Mark,
Mark H Weaver <address@hidden> skribis:
> 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.
OK. Thanks for the detailed analysis!
Ludo’.