[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53976] trunk/blender/source/blender: fix [#33836] issuing bpy.ops.render.render() in console crashes the program
Campbell Barton
ideasman42 at gmail.com
Tue Jan 22 03:21:25 CET 2013
Revision: 53976
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53976
Author: campbellbarton
Date: 2013-01-22 02:21:21 +0000 (Tue, 22 Jan 2013)
Log Message:
-----------
fix [#33836] issuing bpy.ops.render.render() in console crashes the program
don't check the event queue from threads, assert if this happens in future.
Modified Paths:
--------------
trunk/blender/source/blender/editors/render/render_internal.c
trunk/blender/source/blender/windowmanager/intern/wm_window.c
Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c 2013-01-22 01:52:16 UTC (rev 53975)
+++ trunk/blender/source/blender/editors/render/render_internal.c 2013-01-22 02:21:21 UTC (rev 53976)
@@ -73,6 +73,7 @@
#include "render_intern.h"
/* Render Callbacks */
+static int render_break(void *rjv);
/* called inside thread! */
void image_buffer_rect_update(Scene *scene, RenderResult *rr, ImBuf *ibuf, volatile rcti *renrect)
@@ -210,7 +211,7 @@
lay = (v3d) ? v3d->lay : scene->lay;
G.is_break = FALSE;
- RE_test_break_cb(re, NULL, (int (*)(void *))blender_test_break);
+ RE_test_break_cb(re, NULL, render_break);
ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
@@ -443,6 +444,15 @@
return 0;
}
+/* for exec() when there is no render job
+ * note: this wont check for the escape key being pressed, but doing so isnt threadsafe */
+static int render_break(void *UNUSED(rjv))
+{
+ if (G.is_break)
+ return 1;
+ return 0;
+}
+
/* runs in thread, no cursor setting here works. careful with notifiers too (malloc conflicts) */
/* maybe need a way to get job send notifer? */
static void render_drawlock(void *UNUSED(rjv), int lock)
Modified: trunk/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_window.c 2013-01-22 01:52:16 UTC (rev 53975)
+++ trunk/blender/source/blender/windowmanager/intern/wm_window.c 2013-01-22 02:21:21 UTC (rev 53976)
@@ -75,6 +75,11 @@
#include "UI_interface.h"
+/* for assert */
+#ifndef NDEBUG
+# include "BLI_threads.h"
+#endif
+
/* the global to talk to ghost */
static GHOST_SystemHandle g_system = NULL;
@@ -1036,8 +1041,12 @@
void wm_window_process_events(const bContext *C)
{
- int hasevent = GHOST_ProcessEvents(g_system, 0); /* 0 is no wait */
-
+ int hasevent;
+
+ BLI_assert(BLI_thread_is_main());
+
+ hasevent = GHOST_ProcessEvents(g_system, 0); /* 0 is no wait */
+
if (hasevent)
GHOST_DispatchEvents(g_system);
@@ -1059,7 +1068,9 @@
{
static double ltime = 0;
double curtime = PIL_check_seconds_timer();
-
+
+ BLI_assert(BLI_thread_is_main());
+
/* only check for breaks every 50 milliseconds
* if we get called more often.
*/
More information about the Bf-blender-cvs
mailing list