Revision: 16515
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16515
Author:   campbellbarton
Date:     2008-09-14 07:10:45 +0200 (Sun, 14 Sep 2008)

Log Message:
-----------
running scripts in background mode would crash in some cases. (tested all 
scripts, none segfault now)

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/BGL.h
    trunk/blender/source/blender/python/api2_2x/Draw.c
    trunk/blender/source/blender/python/api2_2x/Window.c
    trunk/blender/source/blender/python/api2_2x/bpy_data.c

Modified: trunk/blender/source/blender/python/api2_2x/BGL.h
===================================================================
--- trunk/blender/source/blender/python/api2_2x/BGL.h   2008-09-14 04:35:27 UTC 
(rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/BGL.h   2008-09-14 05:10:45 UTC 
(rev 16515)
@@ -323,8 +323,13 @@
 
 #define ret_def_GLstring  const unsigned char *ret_str;
 #define ret_set_GLstring  ret_str=
-#define ret_ret_GLstring  return PyString_FromString(ret_str);
 
+#define ret_ret_GLstring \
+       if (ret_str) {\
+               return PyString_FromString(ret_str);\
+       } else {\
+               PyErr_SetString(PyExc_AttributeError, "could not get opengl 
string");\
+               return NULL;\
+       }
 
-
 #endif  /*  EXPP_BGL_H */

Modified: trunk/blender/source/blender/python/api2_2x/Draw.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Draw.c  2008-09-14 04:35:27 UTC 
(rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/Draw.c  2008-09-14 05:10:45 UTC 
(rev 16515)
@@ -928,6 +928,11 @@
        Script *script;
        int startspace = 0;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Register() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple
            ( args, "O|OO", &newdrawc, &neweventc, &newbuttonc ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1008,6 +1013,10 @@
 {
        int after = 0;
 
+       if (G.background) {
+               Py_RETURN_NONE;
+       }
+       
        if( !PyArg_ParseTuple( args, "|i", &after ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                                              "expected int argument (or 
nothing)" );
@@ -1022,6 +1031,10 @@
 
 static PyObject *Method_Draw( PyObject * self )
 {
+       if (G.background) {
+               Py_RETURN_NONE;
+       }
+       
        /*@ If forced drawing is disable queue a redraw event instead */
        if( EXPP_disable_force_draw ) {
                scrarea_queue_winredraw( curarea );
@@ -1089,6 +1102,11 @@
        PyObject *result = NULL;
        ListBase listb= {NULL, NULL};
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.UIBlock() in 
background mode." );
+       }
+       
        if ( !PyArg_ParseTuple( args, "O", &val ) || !PyCallable_Check( val ) ) 
                return EXPP_ReturnPyObjError( PyExc_AttributeError,
                                              "expected 1 python function and 2 
ints" );
@@ -1201,6 +1219,11 @@
        int x, y, w, h;
        PyObject *callback=NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Button() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiii|sO", &name, &event,
                               &x, &y, &w, &h, &tip, &callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1225,6 +1248,11 @@
        Button *but;
        PyObject *callback=NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Menu() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
                               &x, &y, &w, &h, &def, &tip, &callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1255,6 +1283,11 @@
        Button *but;
        PyObject *callback=NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Toggle() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
                               &x, &y, &w, &h, &def, &tip, &callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1322,6 +1355,11 @@
        PyObject *mino, *maxo, *inio;
        PyObject *callback=NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Sider() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiiiOOO|isO", &name, &event,
                               &x, &y, &w, &h, &inio, &mino, &maxo, &realtime,
                               &tip, &callback ) )
@@ -1395,6 +1433,11 @@
        float ini, min, max;
        uiBut *ubut;
        
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Scrollbar() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "iiiiiOOO|isO", &event, &x, &y, &w, &h,
                               &inio, &mino, &maxo, &realtime, &tip ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1454,6 +1497,11 @@
        short x, y, w, h;
        PyObject *callback=NULL;
        
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.ColorPicker() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
                               &x, &y, &w, &h, &PyTuple_Type, &inio, &tip, 
&callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1504,6 +1552,11 @@
        short x, y, w, h;
        PyObject *callback=NULL;
        
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Normal() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
                               &x, &y, &w, &h, &PyTuple_Type, &inio, &tip, 
&callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1546,6 +1599,11 @@
        PyObject *callback=NULL;
        uiBut *ubut= NULL;
        
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Number() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiiiOOO|sO", &name, &event,
                               &x, &y, &w, &h, &inio, &mino, &maxo, &tip, 
&callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1617,6 +1675,11 @@
        Button *but;
        PyObject *callback=NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.String() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiiiisi|sO", &info_arg, &event,
                        &x, &y, &w, &h, &newstr, &len, &tip, &callback ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1693,6 +1756,11 @@
        char *font_str = NULL;
        struct BMF_Font *font;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Text() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "s|s", &text, &font_str ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                                              "expected one or two string 
arguments" );
@@ -1724,6 +1792,11 @@
        char *text;
        int x, y, w, h;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Label() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "siiii", &text, &x, &y, &w, &h ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                        "expected a string and four ints" );
@@ -1740,7 +1813,12 @@
        char *text;
        int maxrow = -1;
        PyObject *ret;
-
+       
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupMenu() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "s|i", &text, &maxrow ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                                              "expected a string and optionally 
an int as arguments" );
@@ -1827,6 +1905,11 @@
        ListBase storage = {NULL, NULL};
        TBitem *tb;
        
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupMenuTree() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "O!", &PyList_Type, &current_menu ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                        "Expected a list" );
@@ -1857,6 +1940,11 @@
        short var = 0;
        PyObject *ret = NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupIntInput() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "s|hii", &text, &var, &min, &max ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                                              "expected 1 string and 3 int 
arguments" );
@@ -1879,6 +1967,11 @@
        float min = 0, max = 1, var = 0, a1 = 10, a2 = 2;
        PyObject *ret = NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupFloatInput() 
in background mode." );
+       }
+       
        if( !PyArg_ParseTuple
            ( args, "s|fffff", &text, &var, &min, &max, &a1, &a2 ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1903,6 +1996,11 @@
        char max = 20;
        PyObject *ret = NULL;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupStrInput() in 
background mode." );
+       }
+       
        if( !PyArg_ParseTuple( args, "ss|b", &textMsg, &text, &max ) )
                return EXPP_ReturnPyObjError( PyExc_TypeError,
                                              "expected 2 strings and 1 int" );
@@ -1937,6 +2035,11 @@
        int len, i;
        char *title;
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.PupBlock() in 
background mode." );
+       }
+       
        if (!PyArg_ParseTuple( args, "sO", &title, &pyList ) || 
!PySequence_Check( pyList ))
                return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a 
string and a sequence" );
 
@@ -2070,6 +2173,11 @@
        int clipX = 0, clipY = 0, clipW = -1, clipH = -1;
        /*GLfloat scissorBox[4];*/
 
+       if (G.background) {
+               return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+                                             "Can't run Draw.Image() in 
background mode." );
+       }
+       
        /* parse the arguments passed-in from Python */
        if( !PyArg_ParseTuple( args, "O!ff|ffiiii", &Image_Type, &pyObjImage, 
                &originX, &originY, &zoomX, &zoomY, 

Modified: trunk/blender/source/blender/python/api2_2x/Window.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Window.c        2008-09-14 
04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/Window.c        2008-09-14 
05:10:45 UTC (rev 16515)
@@ -1249,9 +1249,10 @@
                
 static PyObject *M_Window_GetMouseCoords( PyObject * self )
 {
-       short mval[2];
+       short mval[2] = {0, 0};
 
-       getmouse( mval );
+       if (!G.background)
+               getmouse( mval );
 
        return Py_BuildValue( "hh", mval[0], mval[1] );
 }
@@ -1283,16 +1284,12 @@
 
 static PyObject *M_Window_GetMouseButtons( PyObject * self )
 {
-       short mbut = get_mbut(  );
-
-       return Py_BuildValue( "h", mbut );
+       return PyInt_FromLong(G.background ? 0 : (int)get_mbut() );
 }
 
 static PyObject *M_Window_GetKeyQualifiers( PyObject * self )
 {
-       short qual = get_qual(  );
-
-       return Py_BuildValue( "h", qual );
+       return PyInt_FromLong( (int)get_qual() );
 }
 
 static PyObject *M_Window_SetKeyQualifiers( PyObject * self, PyObject * args )

Modified: trunk/blender/source/blender/python/api2_2x/bpy_data.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/bpy_data.c      2008-09-14 
04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/bpy_data.c      2008-09-14 
05:10:45 UTC (rev 16515)
@@ -263,9 +263,12 @@

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to