From ripley at stats.ox.ac.uk  Wed Sep 20 07:32:27 2006
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Wed, 20 Sep 2006 06:32:27 +0100 (BST)
Subject: [Rd] wishlist --- menu entry [Rgui] misc --- stop current
 computation
In-Reply-To: <59d7961d0609191328xdfeef15u83b065d46120dfd0@mail.gmail.com>
References: <556e90a80609191034ma98b7e8o9fe38091b81ce7e6@mail.gmail.com> 
	<Pine.LNX.4.64.0609191845040.2465@gannet.stats.ox.ac.uk>
	<59d7961d0609191328xdfeef15u83b065d46120dfd0@mail.gmail.com>
Message-ID: <Pine.LNX.4.64.0609192219350.12871@gannet.stats.ox.ac.uk>

On Tue, 19 Sep 2006, Henrik Bengtsson wrote:

> On 9/19/06, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
>> On Tue, 19 Sep 2006, Kjetil Halvorsen wrote:
>> 
>> > This is from R-2.4.0alpha on windows XP, downloaded from CRAN yesterday.
>> >
>> > I did
>> > update.packages(destdir= ..., ask=FALSE,checkBuilt=TRUE)
>> >
>> > which took quite a long time (as.expected). When the internet cafe
>> > had to close, I had to stop the downloading, but the menu item
>> > misc --- stop current computation only stopped the current download,
>> > and then R imeadiaetely continued whit the next in the waitin list, so I 
>> had
>> > to kill
>> > R. I  would be nice if this could be corrected so it really
>> > stopped all the waiting computastion!
>> 
>> As it does what it says, it cannot be 'corrected' to do something else.
>> I usually find hitting Ctrl-C (or ESC in Rgui) a few times breaks out
>> here.
>> 
>> The issue is that update.packages (or more precisely download.packages)
>> has a loop of try() constructs, and those are trapping interrupts.
>> I don't think there is any way to distinguish those from other internal
>> errors.  In any case, it is a somewhat delicate question as to what you
>> want: do you want pending on.exit() actions done, for example?
>
> Without digging into the update.packages() et al code, wouldn't a
> distinction between 'error' and 'interrupt' using tryCatch() rather
> than try() solve this?  ...assuming "stop current computation" signals
> some kind of interrupt.

Only to change the design intention for a particular piece of code. Here 
the design intention was to abort just the current download (which can be 
quite useful if it hangs, and allows other packages in the set to be 
installed).  And that only if the interrupt is handled by R, rather than 
by a process invoked by system(), which is possible behaviour in 
download.packages depending on the options. Although it is hard to break 
this particular loop on RGui (harder than I thought as the progress bar 
shifts focus), it does not seem a common enough problem to try to solve on 
its own, and in particular not to change the design intention.

I took the request to be general, and retrospective: 'I have a computation 
running, and I have now decided I want to stop it completely and return to 
the top level'.  That's a reasonable request, especially to those who 
would like to save earlier work in the session (and on Unix we have 
SIGUSR1 to kill the session and save the workspace).  There is only one 
type of interrupt internally in R, and no way that I know of to override 
code-specific interrupt handling,

To do that it looks like we need different classes of interrupts.  Unix 
has several signals for this purpose, but Windows does not.  It's messy 
(not all Unices are the same), but I have in the past wondered about using 
(some of) SIGINT, SIGKILL, SIGTERM and SIGSTOP to do different things, and 
we could fake something similar under Windows.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




[Rd] wishlist --- menu entry [Rgui] misc --- stop current computation
Prof Brian Ripley