[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16515] trunk/blender/source/blender/ python/api2_2x: running scripts in background mode would crash in some cases.

Campbell Barton ideasman42 at gmail.com
Sun Sep 14 07:10:45 CEST 2008


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. @@




More information about the Bf-blender-cvs mailing list