Rev 1511: Acquire and release GIL in a couple more places. in file:///data/jelmer/bzr-svn/gil/
Jelmer Vernooij
jelmer at samba.org
Fri Aug 1 21:55:50 BST 2008
At file:///data/jelmer/bzr-svn/gil/
------------------------------------------------------------
revno: 1511
revision-id: jelmer at samba.org-20080801205549-tfdd1gq00pq6nn1e
parent: jelmer at samba.org-20080801204559-mns64h2depsxw7jp
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: gil
timestamp: Fri 2008-08-01 22:55:49 +0200
message:
Acquire and release GIL in a couple more places.
modified:
client.c client.pyx-20080313235339-wbyjbw2namuiql8f-1
ra.c ra.pyx-20080313140933-qybkqaxe3m4mcll7-1
repos.c repos.pyx-20080314114432-g2b5lqe776tkbl4k-1
util.c util.c-20080531154025-s8ef6ej9tytsnkkw-1
util.h util.h-20080531154025-s8ef6ej9tytsnkkw-2
wc.c wc.pyx-20080313142018-10l8l23vha2j9e6b-1
=== modified file 'client.c'
--- a/client.c 2008-08-01 20:45:59 +0000
+++ b/client.c 2008-08-01 20:55:49 +0000
@@ -271,13 +271,16 @@
Py_XDECREF(client->py_auth);
+
if (auth == Py_None) {
auth_providers = apr_array_make(client->pool, 0, sizeof(svn_auth_provider_object_t *));
if (auth_providers == NULL) {
PyErr_NoMemory();
return 1;
}
+ Py_BEGIN_ALLOW_THREADS
svn_auth_open(&client->client->auth_baton, auth_providers, client->pool);
+ Py_END_ALLOW_THREADS
} else {
client->client->auth_baton = ((AuthObject *)auth)->auth_baton;
}
=== modified file 'ra.c'
--- a/ra.c 2008-08-01 20:45:59 +0000
+++ b/ra.c 2008-08-01 20:55:49 +0000
@@ -348,15 +348,16 @@
static svn_error_t *py_cb_editor_change_prop(void *dir_baton, const char *name, const svn_string_t *value, apr_pool_t *pool)
{
PyObject *self = (PyObject *)dir_baton, *ret;
+ PyGILState_STATE state = PyGILState_Ensure();
if (value != NULL) {
ret = PyObject_CallMethod(self, "change_prop", "sz#", name, value->data, value->len);
} else {
ret = PyObject_CallMethod(self, "change_prop", "sO", name, Py_None);
}
- if (ret == NULL)
- return py_svn_error();
+ CB_CHECK_PYRETVAL(ret);
Py_DECREF(ret);
+ PyGILState_Release(state);
return NULL;
}
@@ -579,16 +580,17 @@
}
#define RUN_RA_WITH_POOL(pool, ra, cmd) { \
+ svn_error_t *err; \
PyThreadState *_save; \
_save = PyEval_SaveThread(); \
- if (!check_error((cmd))) { \
+ err = (cmd); \
+ PyEval_RestoreThread(_save); \
+ if (!check_error(err)) { \
apr_pool_destroy(pool); \
ra->busy = false; \
- PyEval_RestoreThread(_save); \
return NULL; \
} \
ra->busy = false; \
- PyEval_RestoreThread(_save); \
}
static bool ra_check_busy(RemoteAccessObject *raobj)
=== modified file 'repos.c'
--- a/repos.c 2008-07-30 05:51:22 +0000
+++ b/repos.c 2008-08-01 20:55:49 +0000
@@ -86,11 +86,14 @@
ret->pool = Pool(NULL);
if (ret->pool == NULL)
return NULL;
+ Py_BEGIN_ALLOW_THREADS
if (!check_error(svn_repos_open(&ret->repos, path, ret->pool))) {
apr_pool_destroy(ret->pool);
+ PyEval_RestoreThread(_save);
PyObject_Del(ret);
return NULL;
}
+ Py_END_ALLOW_THREADS
return (PyObject *)ret;
}
=== modified file 'util.c'
--- a/util.c 2008-08-01 20:45:59 +0000
+++ b/util.c 2008-08-01 20:55:49 +0000
@@ -60,8 +60,10 @@
void PyErr_SetSubversionException(svn_error_t *error)
{
- PyObject *coremod = PyImport_ImportModule("bzrlib.plugins.svn.core"), *excobj;
- PyObject *excval;
+ PyObject *coremod;
+ PyObject *excval, *excobj;
+
+ coremod = PyImport_ImportModule("bzrlib.plugins.svn.core");
if (coremod == NULL) {
return;
=== modified file 'util.h'
--- a/util.h 2008-08-01 20:45:59 +0000
+++ b/util.h 2008-08-01 20:55:49 +0000
@@ -38,11 +38,17 @@
svn_error_t *py_svn_error(void);
void PyErr_SetSubversionException(svn_error_t *error);
-#define RUN_SVN_WITH_POOL(pool, cmd) \
- if (!check_error((cmd))) { \
+#define RUN_SVN_WITH_POOL(pool, cmd) { \
+ svn_error_t *err; \
+ PyThreadState *_save; \
+ _save = PyEval_SaveThread(); \
+ err = (cmd); \
+ PyEval_RestoreThread(_save); \
+ if (!check_error(err)) { \
apr_pool_destroy(pool); \
return NULL; \
- }
+ } \
+}
PyObject *wrap_lock(svn_lock_t *lock);
apr_array_header_t *revnum_list_to_apr_array(apr_pool_t *pool, PyObject *l);
=== modified file 'wc.c'
--- a/wc.c 2008-08-01 20:45:59 +0000
+++ b/wc.c 2008-08-01 20:55:49 +0000
@@ -272,10 +272,15 @@
} else {
parent_wc = ((AdmObject *)associated)->adm;
}
+ Py_BEGIN_ALLOW_THREADS
if (!check_error(svn_wc_adm_open3(&ret->adm, parent_wc, path,
write_lock, depth, py_cancel_func, cancel_func,
- ret->pool)))
+ ret->pool))) {
+ PyEval_RestoreThread(_save);
return NULL;
+ }
+ Py_END_ALLOW_THREADS
+
return (PyObject *)ret;
}
@@ -568,13 +573,16 @@
if (pool == NULL)
return NULL;
latest_revnum = (svn_revnum_t *)apr_palloc(pool, sizeof(svn_revnum_t));
+ Py_BEGIN_ALLOW_THREADS
if (!check_error(svn_wc_get_update_editor2(latest_revnum, admobj->adm, target,
use_commit_times, recurse, py_wc_notify_func, (void *)notify_func,
py_cancel_func, (void *)cancel_func, diff3_cmd, &editor, &edit_baton,
NULL, pool))) {
apr_pool_destroy(pool);
+ PyEval_RestoreThread(_save);
return NULL;
}
+ Py_END_ALLOW_THREADS
return new_editor_object(editor, edit_baton, pool, &Editor_Type, NULL, NULL);
}
@@ -650,7 +658,9 @@
{
AdmObject *admobj = (AdmObject *)self;
if (admobj->adm != NULL) {
+ Py_BEGIN_ALLOW_THREADS
svn_wc_adm_close(admobj->adm);
+ Py_END_ALLOW_THREADS
admobj->adm = NULL;
}
More information about the bazaar-commits
mailing list