wxGTK SWIGged updates for:

Changed (again) how the Python global interpreter lock is handled as
well as the Python thread state.  This time it works on SMP machines
without barfing and is also still compatible with Python debuggers.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13128 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-12-20 07:08:06 +00:00
parent e8788ed0c6
commit 474c48f92e
28 changed files with 8570 additions and 7644 deletions

View File

@@ -142,14 +142,12 @@ wxString* wxPyInputStream::read(int size) {
}
// read until EOF
wxPy_BEGIN_ALLOW_THREADS;
while (! wxi->Eof()) {
wxi->Read(buf, BUFSIZE);
//*s += wxString(buf, wxi->LastRead());
s->Append(buf, wxi->LastRead());
}
delete buf;
wxPy_END_ALLOW_THREADS;
// error check
if (wxi->LastError() == wxSTREAM_READ_ERROR) {
@@ -166,10 +164,8 @@ wxString* wxPyInputStream::read(int size) {
}
// read size bytes
wxPy_BEGIN_ALLOW_THREADS;
wxi->Read(s->GetWriteBuf(size+1), size);
s->UngetWriteBuf(wxi->LastRead());
wxPy_END_ALLOW_THREADS;
// error check
if (wxi->LastError() == wxSTREAM_READ_ERROR) {
@@ -199,11 +195,9 @@ wxString* wxPyInputStream::readline (int size) {
}
// read until \n or byte limit reached
wxPy_BEGIN_ALLOW_THREADS;
for (i=ch=0; (ch != '\n') && (!wxi->Eof()) && ((size < 0) || (i < size)); i++) {
*s += ch = wxi->GetC();
}
wxPy_END_ALLOW_THREADS;
// errorcheck
if (wxi->LastError() == wxSTREAM_READ_ERROR) {
@@ -230,7 +224,6 @@ wxStringPtrList* wxPyInputStream::readlines (int sizehint) {
}
// read sizehint bytes or until EOF
wxPy_BEGIN_ALLOW_THREADS;
int i;
for (i=0; (!wxi->Eof()) && ((sizehint < 0) || (i < sizehint));) {
wxString* s = readline();
@@ -242,7 +235,6 @@ wxStringPtrList* wxPyInputStream::readlines (int sizehint) {
l->Append(s);
i = i + s->Length();
}
wxPy_END_ALLOW_THREADS;
// error check
if (wxi->LastError() == wxSTREAM_READ_ERROR) {
@@ -279,7 +271,7 @@ protected:
if (bufsize == 0)
return 0;
wxPyTState* state = wxPyBeginBlockThreads();
wxPyBeginBlockThreads();
PyObject* arglist = Py_BuildValue("(i)", bufsize);
PyObject* result = PyEval_CallObject(read, arglist);
Py_DECREF(arglist);
@@ -297,7 +289,7 @@ protected:
}
else
m_lasterror = wxSTREAM_READ_ERROR;
wxPyEndBlockThreads(state);
wxPyEndBlockThreads();
m_lastcount = o;
return o;
}
@@ -308,17 +300,17 @@ protected:
}
virtual off_t OnSysSeek(off_t off, wxSeekMode mode){
wxPyTState* state = wxPyBeginBlockThreads();
wxPyBeginBlockThreads();
PyObject*arglist = Py_BuildValue("(ii)", off, mode);
PyObject*result = PyEval_CallObject(seek, arglist);
Py_DECREF(arglist);
Py_XDECREF(result);
wxPyEndBlockThreads(state);
wxPyEndBlockThreads();
return OnSysTell();
}
virtual off_t OnSysTell() const{
wxPyTState* state = wxPyBeginBlockThreads();
wxPyBeginBlockThreads();
PyObject* arglist = Py_BuildValue("()");
PyObject* result = PyEval_CallObject(tell, arglist);
Py_DECREF(arglist);
@@ -327,7 +319,7 @@ protected:
o = PyInt_AsLong(result);
Py_DECREF(result);
};
wxPyEndBlockThreads(state);
wxPyEndBlockThreads();
return o;
}
@@ -337,12 +329,12 @@ protected:
public:
~wxPyCBInputStream() {
wxPyTState* state = wxPyBeginBlockThreads();
wxPyBeginBlockThreads();
Py_XDECREF(py);
Py_XDECREF(read);
Py_XDECREF(seek);
Py_XDECREF(tell);
wxPyEndBlockThreads(state);
wxPyEndBlockThreads();
}
virtual size_t GetSize() {
@@ -422,8 +414,11 @@ static PyObject *_wrap_new_wxInputStream(PyObject *self, PyObject *args, PyObjec
_arg0 = _obj0;
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (wxPyInputStream *)new_wxPyInputStream(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} if (_result) {
SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyInputStream_p");
_resultobj = Py_BuildValue("s",_ptemp);
@@ -452,8 +447,11 @@ static PyObject *_wrap_wxInputStream_close(PyObject *self, PyObject *args, PyObj
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
wxInputStream_close(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} Py_INCREF(Py_None);
_resultobj = Py_None;
return _resultobj;
@@ -477,8 +475,11 @@ static PyObject *_wrap_wxInputStream_flush(PyObject *self, PyObject *args, PyObj
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
wxInputStream_flush(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} Py_INCREF(Py_None);
_resultobj = Py_None;
return _resultobj;
@@ -503,8 +504,11 @@ static PyObject *_wrap_wxInputStream_eof(PyObject *self, PyObject *args, PyObjec
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (bool )wxInputStream_eof(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} _resultobj = Py_BuildValue("i",_result);
return _resultobj;
}
@@ -529,15 +533,13 @@ static PyObject *_wrap_wxInputStream_read(PyObject *self, PyObject *args, PyObje
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (wxString *)wxInputStream_read(_arg0,_arg1);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
}{
if (_result) {
_resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
delete _result;
}
else
_resultobj=0;
_resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
}
return _resultobj;
}
@@ -562,15 +564,13 @@ static PyObject *_wrap_wxInputStream_readline(PyObject *self, PyObject *args, Py
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (wxString *)wxInputStream_readline(_arg0,_arg1);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
}{
if (_result) {
_resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
delete _result;
}
else
_resultobj=0;
_resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
}
return _resultobj;
}
@@ -595,8 +595,11 @@ static PyObject *_wrap_wxInputStream_readlines(PyObject *self, PyObject *args, P
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (wxStringPtrList *)wxInputStream_readlines(_arg0,_arg1);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
}{
if (_result) {
_resultobj = PyList_New(_result->GetCount());
@@ -635,8 +638,11 @@ static PyObject *_wrap_wxInputStream_seek(PyObject *self, PyObject *args, PyObje
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
wxInputStream_seek(_arg0,_arg1,_arg2);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} Py_INCREF(Py_None);
_resultobj = Py_None;
return _resultobj;
@@ -661,8 +667,11 @@ static PyObject *_wrap_wxInputStream_tell(PyObject *self, PyObject *args, PyObje
}
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
_result = (int )wxInputStream_tell(_arg0);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} _resultobj = Py_BuildValue("i",_result);
return _resultobj;
}
@@ -707,8 +716,11 @@ static PyObject *_wrap_wxOutputStream_write(PyObject *self, PyObject *args, PyOb
#endif
}
{
PyThreadState* __tstate = wxPyBeginAllowThreads();
wxOutputStream_write(_arg0,*_arg1);
wxPyEndAllowThreads(__tstate);
if (PyErr_Occurred()) return NULL;
} Py_INCREF(Py_None);
_resultobj = Py_None;
{