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

Reply via email to