exit_usiblender() to finalize Python before main library data was freed. This solved a somewhat specific sigsegv with pydrivers, but as Ken Hughes found out (thanks!) caused one with scripts that called Blender.Exit(). Now running scripts (G.main->script) are freed in BPY_end_python() itself (so before the rest of the library data is freed), before Py_Finalize(). Works fine in all my tests so far. The file script.c should become obsolete with this change (I added a comment about it there). If all is indeed fine, it will be removed later.
72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
/* blenkernel/script.c
|
|
*
|
|
*
|
|
* $Id$
|
|
*
|
|
* Function(s) related to struct script management.
|
|
*
|
|
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version. The Blender
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
* about this.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* This is a new part of Blender.
|
|
*
|
|
* Contributor(s): Willian P. Germano.
|
|
*
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
*/
|
|
|
|
#include "BKE_script.h"
|
|
#include "BPI_script.h"
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
#include "BKE_bad_level_calls.h" /* for BPY_clear_script */
|
|
|
|
/*
|
|
#include "BLI_blenlib.h"
|
|
#include "BKE_utildefines.h"
|
|
#include "BKE_library.h"
|
|
#include "BKE_global.h"
|
|
#include "BKE_main.h"
|
|
|
|
#include "BPY_extern.h" // Blender Python library
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
*/
|
|
|
|
/* XXX this function and so also the file should not be needed anymore,
|
|
* since we have to force clearing all Python related data before freeing
|
|
* Blender's library. Still testing, will decide later (Willian). */
|
|
void free_script (Script *script)
|
|
{
|
|
if (!script) return;
|
|
|
|
if (script->py_globaldict || script->py_button ||
|
|
script->py_event || script->py_draw)
|
|
{
|
|
BPY_clear_script(script);
|
|
}
|
|
|
|
return;
|
|
}
|