Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
		
			
				
	
	
		
			34 lines
		
	
	
		
			997 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			997 B
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-or-later */
 | 
						|
 | 
						|
/** \file
 | 
						|
 * \ingroup pygen
 | 
						|
 *
 | 
						|
 * This file contains wrapper functions related to global interpreter lock.
 | 
						|
 * these functions are slightly different from the original Python API,
 | 
						|
 * don't throw SIGABRT even if the thread state is NULL. */
 | 
						|
 | 
						|
#include <Python.h>
 | 
						|
 | 
						|
#include "../BPY_extern.h"
 | 
						|
#include "BLI_utildefines.h"
 | 
						|
 | 
						|
BPy_ThreadStatePtr BPY_thread_save(void)
 | 
						|
{
 | 
						|
  /* Use `_PyThreadState_UncheckedGet()` instead of `PyThreadState_Get()`, to avoid a fatal error
 | 
						|
   * issued when a thread state is NULL (the thread state can be NULL when quitting Blender).
 | 
						|
   *
 | 
						|
   * `PyEval_SaveThread()` will release the GIL, so this thread has to have the GIL to begin with
 | 
						|
   * or badness will ensue. */
 | 
						|
  if (_PyThreadState_UncheckedGet() && PyGILState_Check()) {
 | 
						|
    return (BPy_ThreadStatePtr)PyEval_SaveThread();
 | 
						|
  }
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
void BPY_thread_restore(BPy_ThreadStatePtr tstate)
 | 
						|
{
 | 
						|
  if (tstate) {
 | 
						|
    PyEval_RestoreThread((PyThreadState *)tstate);
 | 
						|
  }
 | 
						|
}
 |