Commit 451a356f authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Merged revisions 64685 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r64685 | amaury.forgeotdarc | 2008-07-03 01:40:28 +0200 (Thu, 03 Jul 2008) | 3 lines

  Try a blind fix to nismodule which fails on the solaris10 3.0 buildbot:
  the GIL must be re-acquired in the callback function
........
parent 4b02c5a8
...@@ -98,6 +98,7 @@ typedef int (*foreachfunc)(int, char *, int, char *, int, char *); ...@@ -98,6 +98,7 @@ typedef int (*foreachfunc)(int, char *, int, char *, int, char *);
struct ypcallback_data { struct ypcallback_data {
PyObject *dict; PyObject *dict;
int fix; int fix;
PyThreadState *state;
}; };
static int static int
...@@ -109,6 +110,7 @@ nis_foreach (int instatus, char *inkey, int inkeylen, char *inval, ...@@ -109,6 +110,7 @@ nis_foreach (int instatus, char *inkey, int inkeylen, char *inval,
PyObject *val; PyObject *val;
int err; int err;
PyEval_RestoreThread(indata->state);
if (indata->fix) { if (indata->fix) {
if (inkeylen > 0 && inkey[inkeylen-1] == '\0') if (inkeylen > 0 && inkey[inkeylen-1] == '\0')
inkeylen--; inkeylen--;
...@@ -127,10 +129,11 @@ nis_foreach (int instatus, char *inkey, int inkeylen, char *inval, ...@@ -127,10 +129,11 @@ nis_foreach (int instatus, char *inkey, int inkeylen, char *inval,
err = PyDict_SetItem(indata->dict, key, val); err = PyDict_SetItem(indata->dict, key, val);
Py_DECREF(key); Py_DECREF(key);
Py_DECREF(val); Py_DECREF(val);
if (err != 0) { if (err != 0)
PyErr_Clear(); PyErr_Clear();
indata->state = PyEval_SaveThread();
if (err != 0)
return 1; return 1;
}
return 0; return 0;
} }
return 1; return 1;
...@@ -206,9 +209,9 @@ nis_cat (PyObject *self, PyObject *args, PyObject *kwdict) ...@@ -206,9 +209,9 @@ nis_cat (PyObject *self, PyObject *args, PyObject *kwdict)
data.dict = dict; data.dict = dict;
map = nis_mapname (map, &data.fix); map = nis_mapname (map, &data.fix);
cb.data = (char *)&data; cb.data = (char *)&data;
Py_BEGIN_ALLOW_THREADS data.state = PyEval_SaveThread();
err = yp_all (domain, map, &cb); err = yp_all (domain, map, &cb);
Py_END_ALLOW_THREADS PyEval_RestoreThread(data.state);
if (err != 0) { if (err != 0) {
Py_DECREF(dict); Py_DECREF(dict);
return nis_error(err); return nis_error(err);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment