mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-03-16 21:50:07 +01:00
Add and use the wxPyThreadBlocker class.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxPython/Phoenix/trunk@71603 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -33,29 +33,24 @@ public:
|
||||
wxPyInputStream(PyObject* fileObj, bool block=true)
|
||||
{
|
||||
m_block = block;
|
||||
wxPyBlock_t blocked = wxPyBlock_t_default;
|
||||
if (block) blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker(m_block);
|
||||
|
||||
m_read = wxPyGetMethod(fileObj, "read");
|
||||
m_seek = wxPyGetMethod(fileObj, "seek");
|
||||
m_tell = wxPyGetMethod(fileObj, "tell");
|
||||
|
||||
if (block) wxPyEndBlockThreads(blocked);
|
||||
}
|
||||
|
||||
virtual ~wxPyInputStream()
|
||||
{
|
||||
wxPyBlock_t blocked = wxPyBlock_t_default;
|
||||
if (m_block) blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker(m_block);
|
||||
Py_XDECREF(m_read);
|
||||
Py_XDECREF(m_seek);
|
||||
Py_XDECREF(m_tell);
|
||||
if (m_block) wxPyEndBlockThreads(blocked);
|
||||
}
|
||||
|
||||
wxPyInputStream(const wxPyInputStream& other)
|
||||
{
|
||||
wxPyBlock_t blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker;
|
||||
m_read = other.m_read;
|
||||
m_seek = other.m_seek;
|
||||
m_tell = other.m_tell;
|
||||
@@ -63,7 +58,6 @@ public:
|
||||
Py_INCREF(m_read);
|
||||
Py_INCREF(m_seek);
|
||||
Py_INCREF(m_tell);
|
||||
wxPyEndBlockThreads(blocked);
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -88,7 +82,7 @@ protected:
|
||||
if (bufsize == 0)
|
||||
return 0;
|
||||
|
||||
wxPyBlock_t blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker;
|
||||
PyObject* arglist = Py_BuildValue("(i)", bufsize);
|
||||
PyObject* result = PyEval_CallObject(m_read, arglist);
|
||||
Py_DECREF(arglist);
|
||||
@@ -106,7 +100,6 @@ protected:
|
||||
}
|
||||
else
|
||||
m_lasterror = wxSTREAM_READ_ERROR;
|
||||
wxPyEndBlockThreads(blocked);
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -118,7 +111,7 @@ protected:
|
||||
|
||||
wxFileOffset OnSysSeek(wxFileOffset off, wxSeekMode mode)
|
||||
{
|
||||
wxPyBlock_t blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker;
|
||||
PyObject* arglist = PyTuple_New(2);
|
||||
|
||||
if (sizeof(wxFileOffset) > sizeof(long))
|
||||
@@ -133,13 +126,12 @@ protected:
|
||||
PyObject* result = PyEval_CallObject(m_seek, arglist);
|
||||
Py_DECREF(arglist);
|
||||
Py_XDECREF(result);
|
||||
wxPyEndBlockThreads(blocked);
|
||||
return OnSysTell();
|
||||
}
|
||||
|
||||
wxFileOffset OnSysTell() const
|
||||
{
|
||||
wxPyBlock_t blocked = wxPyBeginBlockThreads();
|
||||
wxPyThreadBlocker blocker;
|
||||
PyObject* arglist = Py_BuildValue("()");
|
||||
PyObject* result = PyEval_CallObject(m_tell, arglist);
|
||||
Py_DECREF(arglist);
|
||||
@@ -151,7 +143,6 @@ protected:
|
||||
o = wxPyInt_AsLong(result);
|
||||
Py_DECREF(result);
|
||||
};
|
||||
wxPyEndBlockThreads(blocked);
|
||||
return o;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user