Revision: 454
          http://rpy.svn.sourceforge.net/rpy/?rev=454&view=rev
Author:   lgautier
Date:     2008-03-21 15:31:25 -0700 (Fri, 21 Mar 2008)

Log Message:
-----------
Added a boolean to indicate whether the embedded R had been initialized or not

The initialization is now only possible if that boolean is False

Modified Paths:
--------------
    branches/rpy_nextgen/rpy/rinterface/rinterface.c

Modified: branches/rpy_nextgen/rpy/rinterface/rinterface.c
===================================================================
--- branches/rpy_nextgen/rpy/rinterface/rinterface.c    2008-03-21 17:49:18 UTC 
(rev 453)
+++ branches/rpy_nextgen/rpy/rinterface/rinterface.c    2008-03-21 22:31:25 UTC 
(rev 454)
@@ -87,6 +87,7 @@
   error("Interrupted");
 }
 
+static PyObject *embeddedR_isInitialized;
 
 /* The Python original SIGINT handler */
 PyOS_sighandler_t python_sigint;
@@ -135,6 +136,12 @@
  */
 static PyObject* EmbeddedR_init(PyObject *self, PyObject *args) 
 {
+
+  if (PyObject_IsTrue(embeddedR_isInitialized)) {
+    PyErr_Format(PyExc_RuntimeError, "Already initialized.");
+    return NULL;
+  }
+
   //FIXME: arbitrary number of options
   //char *defaultargv[] = {"rpython", "--verbose"};
   char *options[5] = {"", "", "", "", ""};
@@ -156,9 +163,12 @@
   
   int status = Rf_initEmbeddedR(n_opt, options);
 
+  embeddedR_isInitialized = PyBool_FromLong((long)1);
+
   globalEnv->sexp = R_GlobalEnv;
 
   PyObject *res = PyInt_FromLong(status);
+
   return res;
 }
 PyDoc_STRVAR(EmbeddedR_init_doc,
@@ -1355,6 +1365,12 @@
   Py_INCREF(ErrorObject);
   PyModule_AddObject(m, "RobjectNotFound", ErrorObject);
 
+  embeddedR_isInitialized = PyBool_FromLong((long)0);
+  if (PyModule_AddObject(m, "isInitialized", embeddedR_isInitialized) < 0)
+    return;
+  //FIXME: DECREF ?
+  //Py_DECREF(embeddedR_isInitialized);
+
   globalEnv = (SexpObject *)PyObject_New(SexpObject, 
                                         &EnvironmentSexp_Type);
   globalEnv->sexp = R_EmptyEnv;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
rpy-list mailing list
rpy-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rpy-list

Reply via email to