Because there is no second thread to do that, R is single threaded. The gc could only be run from within another R API command or macro, but there is none in between.
Best Oleg Dr Oleg Sklyar Research Technologist AHL / Man Investments Ltd +44 (0)20 7144 3803 oskl...@maninvestments.com > -----Original Message----- > From: r-devel-boun...@r-project.org > [mailto:r-devel-boun...@r-project.org] On Behalf Of Dominick Samperi > Sent: 14 April 2010 06:51 > To: r-devel@r-project.org > Subject: [Rd] Why no race condition when returning > UNPROTECT-ed memory fromC? > > Consider the C (or C++) code called from the .Call interface: > SEXP foo() { > SEXP *p = PROTECT(allocVector(REALSXP, 10)); > ... > UNPROTECT(1); > return p; > } > > Why is there no danger that the allocated memory will be garbage > collected after the UNPROTECT, but before the return of p? > > I have used code like this for some time and have never had a > problem, but I'm not sure if/why it is guaranteed to work. > > Thanks, > Dominick > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ********************************************************************** Please consider the environment before printing this email or its attachments. The contents of this email are for the named addressees ...{{dropped:19}} ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel