1
2//
3// This source file is part of appleseed.
4// Visit http://appleseedhq.net/ for additional information and resources.
5//
6// This software is released under the MIT license.
7//
8// Copyright (c) 2012-2013 Esteban Tovagliari, Jupiter Jazz Limited
9// Copyright (c) 2014-2017 Esteban Tovagliari, The appleseedhq Organization
10//
11// Permission is hereby granted, free of charge, to any person obtaining a copy
12// of this software and associated documentation files (the "Software"), to deal
13// in the Software without restriction, including without limitation the rights
14// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15// copies of the Software, and to permit persons to whom the Software is
16// furnished to do so, subject to the following conditions:
17//
18// The above copyright notice and this permission notice shall be included in
19// all copies or substantial portions of the Software.
20//
21// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27// THE SOFTWARE.
28//
29
30// Interface header.
31#include "gillocks.h"
32
33ScopedGILLock::ScopedGILLock()
34 : m_threads_initialized(PyEval_ThreadsInitialized() ? true : false)
35{
36 if (m_threads_initialized)
37 m_state = PyGILState_Ensure();
38}
39
40ScopedGILLock::~ScopedGILLock()
41{
42 if (m_threads_initialized)
43 PyGILState_Release(m_state);
44}
45
46ScopedGILUnlock::ScopedGILUnlock()
47 : m_threads_initialized(PyEval_ThreadsInitialized() ? true : false)
48{
49 if (m_threads_initialized)
50 m_state = PyEval_SaveThread();
51}
52
53ScopedGILUnlock::~ScopedGILUnlock()
54{
55 if (m_threads_initialized)
56 PyEval_RestoreThread(m_state);
57}
58