From murdoch@dunc@n @ending from gm@il@com  Mon Nov 12 15:56:40 2018
From: murdoch@dunc@n @ending from gm@il@com (Duncan Murdoch)
Date: Mon, 12 Nov 2018 09:56:40 -0500
Subject: [Rd] Better cleanup of example session during check
In-Reply-To: <22caaa89-d5dd-17eb-c9e0-001741ca052c@gmail.com>
References: <39022329-7000-4081-812E-4A5887A33115@gmail.com>
 <22caaa89-d5dd-17eb-c9e0-001741ca052c@gmail.com>
Message-ID: <f91d1160-c70d-9dfe-1269-c963f6a2e138@gmail.com>

On 12/11/2018 8:32 AM, Duncan Murdoch wrote:
> On 12/11/2018 8:09 AM, Thomas Lin Pedersen wrote:
>> I have a couple of packages (?fiery? and ?reqres') that uses a mock of a rook request for their examples. The mock is an R6 object containing a rawConnection, along with a finalizer that closes this connection when the object is removed. So far so good. I?ve recently been getting CRAN errors due to the rawConnection not being closed in examples
>>
>>> cleanEx()
>> Error: connections left open:
>> 	content (rawConnection)
>>
>> and the only way to remove this is by removing the objects and calling gc() as part of the example code. While it is possible to hide all that inside a \dontshow{} block, it appears to me that it would be better if cleanEx() did a cleaning of the environment along with a single gc call prior to performing any checks on the end state. Is this something you would consider?
> 
> Wouldn't it be possible for you to add a way to explicitly request the
> connection be closed?  Then the finalizer would only need to close it if
> you forgot.
> 

After some private messages, it appears that having the example code 
explicitly remove the object is enough to satisfy the check.  Presumably 
this is because a garbage collection is happening before the error is 
issued, and it triggers the finalizer.

Duncan Murdoch



[Rd] Better cleanup of example session during check
Duncan Murdoch