From oliver at first.in-berlin.de  Thu Jun  9 16:52:09 2011
From: oliver at first.in-berlin.de (oliver)
Date: Thu, 9 Jun 2011 16:52:09 +0200
Subject: [Rd] Ctrl-C of functions that allocated mem
In-Reply-To: <20110609144233.GA5957@siouxsie>
References: <20110609000627.GA3482@siouxsie>
	<FF0548F3-A51E-426E-8D18-367E34FD61E2@r-project.org>
	<20110609144233.GA5957@siouxsie>
Message-ID: <20110609145209.GA6936@siouxsie>

On Thu, Jun 09, 2011 at 04:42:33PM +0200, oliver wrote:
> On Wed, Jun 08, 2011 at 08:40:21PM -0400, Simon Urbanek wrote:
> > 
> > On Jun 8, 2011, at 8:06 PM, oliver wrote:
> > 
> > > 
> > > Hello,
> > > 
> > > 
> > > what happens, when a function (R-extension in C), that allocated memory
> > > (strdup(), malloc()/calloc() and so on), and is used in interactive mode, then
> > > will be stopped via Ctrl-C?
> > > 
> > > I would assume that there remains allocated memory,
> > > which is not usable and also not accessable (hence no
> > > way to free it).
> > > 
> > > Are there any mechanisms in R that could help in rolling
> > > back the allocation?
> > > 
> > 
> > Yes, if you read R-exts:
> > http://r.research.att.com/man/R-exts.html#Memory-allocation
> > you would know that you're not supposed to use malloc/calloc at all and if
> > you allow interruption ("regular" C code does not) R_alloc does what you asked
> > about.
> [...]
> 
> In the printed (pdf) version of R-exts I found that
> R_alloc()  and S_alloc() and some other functions
> from section 6.1.1 have return type char*.
> 
> This seesm to be a relict from the K&R era,
> because since ANSI C  void*  is the type for generic pointers.
> 
> will it be changed in the future, so that
> R_alloc() will be  void* R_alloc() one day?
[...]


..and btw: when casting to (void*)  instead of mytype*
(as is seen on page 122 of "Writing R Extensions" (2011-04-13)
t's much better.

The the pointer is generic and will automatically be correctly
assigned to the left hand side.

But better would be of course to avoid any casts and make the
return type of the alloc-functions void*.


Ciao,
  Oliver



[Rd] Ctrl-C of functions that allocated mem
oliver