[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-12-13 Thread Martin v. Löwis

Martin v. Löwis mar...@v.loewis.de added the comment:

Committed fork-thread-patch-2 as r67736 into 2.5 branch.

--
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-12-03 Thread Barry A. Warsaw

Changes by Barry A. Warsaw [EMAIL PROTECTED]:


--
priority: deferred blocker - release blocker

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-30 Thread Barry A. Warsaw

Barry A. Warsaw [EMAIL PROTECTED] added the comment:

Since this is a Python 2.5.3 issue, I'm lowering to deferred blocker
until after 3.0 and 2.6.1 are released.

--
nosy: +barry
priority: release blocker - deferred blocker

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-29 Thread Christian Heimes

Christian Heimes [EMAIL PROTECTED] added the comment:

I was wrong and the patch is right. Something is wrong in
multiprocessings connection_recvbytes_into() function for the old buffer
protocol. Somehow PyArg_ParseTuple(args, w#| ...) fucks up the
process' memory.

Martin, are you fine with the patch? fork-thread-patch-2 still applies
with some fuzzying.

--
assignee: christian.heimes - loewis
nosy: +loewis

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-28 Thread Christian Heimes

Christian Heimes [EMAIL PROTECTED] added the comment:

The fix is required to run multiprocessing on Python 2.4 and 2.5, see
#4451. I suggest we fix the issue in 2.5.3. The fork-thread-patch-2
patch doesn't work on Python 2.5. I'm getting a segfault on my system:

test_connection (multiprocessing.tests.WithProcessesTestConnection) ...
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fa2e999f6e0 (LWP 10594)]
0x0052065f in PyCFunction_Call (func=Cannot access memory at
address 0x7ffeffd8
) at Objects/methodobject.c:73
73  return (*meth)(self, arg);

Linux on AMD64 with Python 2.5 svn --with-pydebug.

--
resolution: fixed - 
status: closed - open
versions: +Python 2.5.3

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-28 Thread Benjamin Peterson

Changes by Benjamin Peterson [EMAIL PROTECTED]:


--
versions:  -Python 2.5, Python 2.6, Python 3.0

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-28 Thread Jesse Noller

Changes by Jesse Noller [EMAIL PROTECTED]:


--
nosy: +jnoller

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-11-28 Thread Gregory P. Smith

Changes by Gregory P. Smith [EMAIL PROTECTED]:


--
assignee: gregory.p.smith - christian.heimes

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-06-12 Thread Benjamin Peterson

Benjamin Peterson [EMAIL PROTECTED] added the comment:

I applied this in r64212.

--
resolution:  - fixed
status: open - closed

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-06-11 Thread Gregory P. Smith

Gregory P. Smith [EMAIL PROTECTED] added the comment:

we need this in before 2.6 is released.

--
assignee:  - gregory.p.smith
nosy: +gregory.p.smith
priority: high - critical

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-06-11 Thread Benjamin Peterson

Benjamin Peterson [EMAIL PROTECTED] added the comment:

Gregory, go ahead and apply and see if can stop the hell in the buildbots.

--
nosy: +benjamin.peterson

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com




[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-06-11 Thread Adam Olsen

Adam Olsen [EMAIL PROTECTED] added the comment:

Updated version of roudkerk's patch.  Adds the new function to
pythread.h and is based off of current trunk.

Note that Parser/intrcheck.c isn't used on my box, so it's completely
untested.

roudkerk's original analysis is correct.  The TLS is never informed that
the old thread is gone, so when it seems the same id again it assumes it
is the old thread, which PyThreadState_Swap doesn't like.

Added file: http://bugs.python.org/file10595/fork-thread-patch-2

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-06-11 Thread Adam Olsen

Adam Olsen [EMAIL PROTECTED] added the comment:

Incidentally, it doesn't seem necessary to reinitialize the lock.  Posix
duplicates the lock, so if you hold it when you fork your child will be
able to unlock it and use it as normal.  Maybe there's some non-Posix
behaviour or something even more obscure when #401226 was done?

(reinitializing is essentially harmless though, so in no way should this
hold up release.)

___
Python tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-03-07 Thread Ralf Schmitt

Changes by Ralf Schmitt:


--
nosy: +schmir

__
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
__
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-01-08 Thread Christian Heimes

Christian Heimes added the comment:

Bug day task

--
nosy: +tiran
priority:  - high
versions:  -Python 2.4

__
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
__
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-01-08 Thread Adam Olsen

Changes by Adam Olsen:


--
nosy: +rhamphoryncus

__
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
__
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2008-01-06 Thread roudkerk

roudkerk added the comment:

The included patch against python2.51 fixes the problem for me.

--
versions: +Python 2.6, Python 3.0
Added file: http://bugs.python.org/file9076/fork-thread-patch

__
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
__
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1683] Thread local storage and PyGILState_* mucked up by os.fork()

2007-12-21 Thread roudkerk

New submission from roudkerk:

I got a report that one of the tests for processing
(http://cheeseshop.python.org/pypi/processing) was failing with

Fatal Python error: Invalid thread state for this thread

when run with a debug interpreter.  This appears to be caused by the
interaction between os.fork() and threads.  The following attached
program reliably reproduces the problem for me on Ubuntu edgy for x86.

All that happens is that the parent process starts a subthread then
forks, and then the child process starts a subthread.

With the normal interpreter I get

started thread -1211028576 in process 18683
I am thread -1211028576 in process 18683
started thread -1211028576 in process 18685
I am thread -1211028576 in process 18685

as expected, but with the debug interpreter I get

started thread -1210782816 in process 18687
I am thread -1210782816 in process 18687
started thread -1210782816 in process 18689
Fatal Python error: Invalid thread state for this thread
[5817 refs]

Notice that the child process is reusing a thread id that was 
being used by the parent process at the time of the fork.

The code raising the error seems to be in pystate.c:

PyThreadState *
PyThreadState_Swap(PyThreadState *new)
{
PyThreadState *old = _PyThreadState_Current;

_PyThreadState_Current = new;
/* It should not be possible for more than one thread state
   to be used for a thread.  Check this the best we can in
debug 
   builds.
*/
#if defined(Py_DEBUG)  defined(WITH_THREAD)
if (new) {
PyThreadState *check = PyGILState_GetThisThreadState();
if (check  check != new)
Py_FatalError(Invalid thread state for this
thread);
}
#endif
return old;
}

It looks as though PyGILState_GetThisThreadState() is returning the
thread state of the thread from the parent process which has the same
id as the current thread.  Therefore the check fails.

I think the thread local storage implementation in thread.c should
provide a function _PyThread_ReInitTLS() which PyOS_AfterFork() can
call.  I think _PyThread_ReInitTLS() just needs to remove and free
each struct key in the linked list which does not match the id of
the calling thread.

--
components: Interpreter Core
files: dbg2.py
messages: 58954
nosy: roudkerk
severity: normal
status: open
title: Thread local storage and PyGILState_* mucked up by os.fork()
type: crash
versions: Python 2.4, Python 2.5
Added file: http://bugs.python.org/file9023/dbg2.py

__
Tracker [EMAIL PROTECTED]
http://bugs.python.org/issue1683
__import time, os, thread

def f():
print I am thread %d in process %d % (thread.get_ident(),os.getpid())
time.sleep(1)

ident = thread.start_new_thread(f, ())
print started thread %d in process %d % (ident, os.getpid())
time.sleep(0.5)  # give thread a chance to start

pid = os.fork()
if pid == 0:
ident = thread.start_new_thread(f, ())
print started thread %d in process %d % (ident, os.getpid())
time.sleep(0.5)  # give thread a chance to start
os._exit(0)

os.waitpid(pid, 0)
___
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com