The reason is that the svn_swig_py_pool_destroyed is called from the
apr_terminate function call which is called from apache after all the
other threads are terminated.
If there is a way in apr to call the svn_swig_py_pool_destroyed when the
thread that created the pool terminates, the problem is solved to.
Regards,
Marc
-----Original Message-----
From: Max Bowsher [mailto:maxb@ukf.net]
Sent: Sunday, October 16, 2005 16:27
To: David James; Marc Haesen
Cc: dev@subversion.tigris.org; Daniel L. Rall
Subject: Re: Crash in python bindings on windows (in apache)
David James wrote:
> On 10/14/05, Marc Haesen <Marc.Haesen@telindus.be> wrote:
>> The current python bindings crash in windows when used with viewcvs
in
>> apache. The crash occurs when the apache server is restarted or
stopped.
>>
>> It is the routine svn_swig_py_pool_destroyed that is crashing because
>> the function call apr_threadkey_private_get(&val, _saved_thread_key);
>> returns NULL as val. This is because the svn_swig_py_pool_destroyed
is
>> not called from the same thread that created the pool.
>>
>> One possible fix is to replace the svn_swig_py_release_py_lock and
>> svn_swig_py_acquire_py_lock with the following two functions (only
using
>> one thread_state for all threads):
>>
>> #ifdef ACQUIRE_PYTHON_LOCK
>> static PyThreadState *thread_state;
>> #endif
>>
>> void svn_swig_py_release_py_lock(void)
>> {
>> #ifdef ACQUIRE_PYTHON_LOCK
>> thread_state = PyEval_SaveThread();
>> #endif
>> }
>>
>> void svn_swig_py_acquire_py_lock(void)
>> {
>> #ifdef ACQUIRE_PYTHON_LOCK
>> PyEval_RestoreThread(thread_state);
>> #endif
>> }
> Thanks Marc! Max, Daniel, do you think it would be a good idea to
> change our bindings to use a single threadstate on Windows? (Using
> #ifdef WIN32 around Marc's code)
No!
First, *why* is the cross thread behaviour occurring?
Second, something as bizarre as saving the Python thread-local
information
in one thread and restoring that info into a different thread seems just
plain *wrong*.
Max.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Mon Oct 17 08:52:54 2005