diff options
author | Olly Betts <olly@survex.com> | 2009-07-29 03:34:22 +0000 |
---|---|---|
committer | Olly Betts <olly@survex.com> | 2009-07-29 03:34:22 +0000 |
commit | 0d539c8048bd659c7f81823fdc8a589e09c4def2 (patch) | |
tree | 248d108395228d9a294d333a407837530abf403b /Lib/python/std_map.i | |
parent | 1f01eb5d7d59e21e479053333152d8e40af0459f (diff) | |
download | swig-0d539c8048bd659c7f81823fdc8a589e09c4def2.tar.gz |
[Python] Add missing locks to std::map wrappers. Patch from
Paul Hampson in SF#2813836.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11465 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Lib/python/std_map.i')
-rw-r--r-- | Lib/python/std_map.i | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Lib/python/std_map.i b/Lib/python/std_map.i index efe0e5e4c..074c43180 100644 --- a/Lib/python/std_map.i +++ b/Lib/python/std_map.i @@ -20,6 +20,7 @@ typedef std::map<K,T> map_type; static int asptr(PyObject *obj, map_type **val) { int res = SWIG_ERROR; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; if (PyDict_Check(obj)) { SwigVar_PyObject items = PyObject_CallMethod(obj,(char *)"items",NULL); %#if PY_VERSION_HEX >= 0x03000000 @@ -32,6 +33,7 @@ res = SWIG_ConvertPtr(obj,(void**)&p,swig::type_info<map_type>(),0); if (SWIG_IsOK(res) && val) *val = p; } + SWIG_PYTHON_THREAD_END_BLOCK; return res; } }; @@ -47,10 +49,10 @@ if (desc && desc->clientdata) { return SWIG_NewPointerObj(new map_type(map), desc, SWIG_POINTER_OWN); } else { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; size_type size = map.size(); int pysize = (size <= (size_type) INT_MAX) ? (int) size : -1; if (pysize < 0) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(PyExc_OverflowError, "map size not valid in python"); SWIG_PYTHON_THREAD_END_BLOCK; @@ -62,6 +64,7 @@ swig::SwigVar_PyObject val = swig::from(i->second); PyDict_SetItem(obj, key, val); } + SWIG_PYTHON_THREAD_END_BLOCK; return obj; } } @@ -165,8 +168,8 @@ PyObject* keys() { Map::size_type size = self->size(); int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; if (pysize < 0) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(PyExc_OverflowError, "map size not valid in python"); SWIG_PYTHON_THREAD_END_BLOCK; @@ -177,14 +180,15 @@ for (int j = 0; j < pysize; ++i, ++j) { PyList_SET_ITEM(keyList, j, swig::from(i->first)); } + SWIG_PYTHON_THREAD_END_BLOCK; return keyList; } PyObject* values() { Map::size_type size = self->size(); int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; if (pysize < 0) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(PyExc_OverflowError, "map size not valid in python"); SWIG_PYTHON_THREAD_END_BLOCK; @@ -195,14 +199,15 @@ for (int j = 0; j < pysize; ++i, ++j) { PyList_SET_ITEM(valList, j, swig::from(i->second)); } + SWIG_PYTHON_THREAD_END_BLOCK; return valList; } PyObject* items() { Map::size_type size = self->size(); int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; if (pysize < 0) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(PyExc_OverflowError, "map size not valid in python"); SWIG_PYTHON_THREAD_END_BLOCK; @@ -213,6 +218,7 @@ for (int j = 0; j < pysize; ++i, ++j) { PyList_SET_ITEM(itemList, j, swig::from(*i)); } + SWIG_PYTHON_THREAD_END_BLOCK; return itemList; } |