Changeset: 9605ae275c66 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9605ae275c66 Modified Files: monetdb5/extras/rapi/rapi.c Branch: RIntegration Log Message:
Revert part and protect against possible errors. diffs (78 lines): diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c --- a/monetdb5/extras/rapi/rapi.c +++ b/monetdb5/extras/rapi/rapi.c @@ -130,19 +130,6 @@ static void RAPIinitialize(void) { rapiInitialized++; } -static SEXP RAPInewEnvironment(Client cntxt) -{ - SEXP env; - char buf[128]; - - /* create new, empty environment */ - /* ugly call required since Rf_NewEnvironment is not in the public headers*/ - snprintf(buf,128,"new.env%d",cntxt->idx); - env = PROTECT(eval(lang1(install(buf)),R_GlobalEnv)); - assert(env != NULL); - return env; -} - str RAPIeval(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { str exprStr = *(str*) getArgReference(stk, pci, pci->retc); SEXP x, env,retval; @@ -172,7 +159,7 @@ str RAPIeval(Client cntxt, MalBlkPtr mb, args = (str*) GDKzalloc(sizeof(str) * pci->argc); if (args == NULL){ - GDKfree(rcall); + free(rcall); throw(MAL, "rapi.eval", MAL_MALLOC_FAIL); } @@ -183,7 +170,8 @@ str RAPIeval(Client cntxt, MalBlkPtr mb, #endif MT_lock_set(&rapiLock, "rapi.evaluate"); - env = RAPInewEnvironment(cntxt); + env = PROTECT(eval(lang1(install("new.env")),R_GlobalEnv)); + assert(env != NULL); // install the MAL variables into the R environment // we can basically map values to int ("INTEGER") or double ("REAL") @@ -389,7 +377,7 @@ str RAPIeval(Client cntxt, MalBlkPtr mb, } wrapup: MT_lock_unset(&rapiLock, "rapi.evaluate"); - GDKfree(rcall); + free(rcall); GDKfree(args); /* unprotect environment, so it will be eaten by the GC. */ @@ -430,7 +418,7 @@ str RAPIevalScalar(Client cntxt, MalBlkP args = (str*) GDKzalloc(sizeof(str) * pci->argc); if (args == NULL){ - GDKfree(rcall); + free(rcall); throw(MAL, "rapi.scalar", MAL_MALLOC_FAIL); } @@ -441,7 +429,8 @@ str RAPIevalScalar(Client cntxt, MalBlkP #endif MT_lock_set(&rapiLock, "rapi.scalar"); - env = RAPInewEnvironment(cntxt); + env = PROTECT(eval(lang1(install("new.env")),R_GlobalEnv)); + assert(env != NULL); // install the MAL variables into the R environment // we can basically map values to int ("INTEGER") or double ("REAL") @@ -679,6 +668,7 @@ str RAPIevalScalar(Client cntxt, MalBlkP } wrapup: MT_lock_unset(&rapiLock, "rapi.scalar"); + free(rcall); GDKfree(args); /* unprotect environment, so it will be eaten by the GC. */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list