[Rd] interrupting native code

Kjell Konis kjell.konis at epfl.ch
Fri May 16 12:35:17 CEST 2008


The problem is that my package uses an external pointer to keep track  
of a structure created by the lp_solve library. If I use  
R_CheckUserInterrupt in the lp_solve abort function it leaves the  
structure in a messed-up state after an interrupt occurs. I am not  
even able to free the memory allocated in the structure. I need to be  
able to tell the lp_solve functions to interrupt themselves if I am  
going to support interrupts at all.

I took a longer look at errors.c and it seems my solution should work  
as long as neither HAVE_AQUA nor Win32 are defined. Under the  
circumstances, I think that's the best I can do.

Any suggestions for a UI independent way to check for interrupts would  
be appreciated.

Thanks,
Kjell

On 15 mai 08, at 16:41, Prof Brian Ripley wrote:

> How is R_interrupts_pending going to be set?
>
> It is set in the interrupt handler for SIGINT, but that is not the  
> only way to indicate an interrupt, and it is not necessarily  
> available to users of GUIs and embedded R.
>
> Without servicing the GUIs all interaction will be dead, including  
> sending an interrrupt from menus/buttons/keyboard.  See the comment  
> in the code for R_CheckUserInterrupt.
>
> On Thu, 15 May 2008, Kjell Konis wrote:
>
>> Hello,
>>
>> I have some native code that I would like to allow users to  
>> interrupt. However, I would like to do it more gracefully than with  
>> R_CheckUserInterrupt(). The solution I came up with is to call the  
>> following abort function periodically - if it returns 1 then I  
>> clean up and return.
>>
>> int __WINAPI RlpSolveAbortFunction(lprec *lp, void *userhandle)
>> {
>> if(R_interrupts_pending)
>>  return(1);
>>
>> return(0);
>> }
>>
>> This seems to work fine on Mac (sans Aqua) and Linux. Is this going  
>> to be portable?  Also, is there anything else I need to do?  For  
>> instance set R_interrupts_pending to 0 after I respond to it?
>>
>> Thanks.
>> Kjell
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> -- 
> 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



More information about the R-devel mailing list