[Rd] check does not check that package examples remove tempdir()

Tomas Kalibera tomas.kalibera at gmail.com
Fri Nov 10 10:26:08 CET 2017


Please note there is parallel::mcparallel/mccollect in R which provides 
similar functionality, mcparallel starts a new job and mccollect allows 
to wait for it.

You are right about _exit, but there are additional issues which cannot 
be solved independently in an external package, and, such a low level 
interface cannot be used without race conditions from R anyway.

Best
Tomas

On 11/09/2017 02:55 AM, danlrobertson89 at gmail.com wrote:
>> tempdir(). I think it happens because the forked process shares the
>> value of tempdir() with the parent process and removes it when it
>> exits.
> This is very likely the case. Pretty much the entire library can be
> summed up by bfork_fork, which is the following.
>
>      SEXP res;
>      pid_t pid;
>      if((pid = fork()) == 0) {
>          PROTECT(res = eval(lang1(fn), R_GlobalEnv));
>          PROTECT(res = eval(lang2(install("q"), mkString("no")), R_GlobalEnv));
>          UNPROTECT(2);
>      }
>
>      return ScalarInteger(pid);
>
> I wrote this lib when I was still in school and can see several issues
> with the implementation of `bfork_fork`. This issue happens because
> we do not exit with _exit, but by essentially calling q("no").
>
> Cheers,
>
> Dan
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



	[[alternative HTML version deleted]]



More information about the R-devel mailing list