Re: [Python-Dev] Signals, threads, blocking C functions

2006-10-12 Thread Nick Maclaren
=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= <[EMAIL PROTECTED]> wrote: Michael Hudson schrieb: > > >> According to [1], all python needs to do to avoid this problem is > >> block all signals in all but the main thread; > > > > Argh, no: then people who call system() from non-main threads end up >

Re: [Python-Dev] Signals, threads, blocking C functions

2006-10-12 Thread Nick Maclaren
Sorry. I was on holiday, and then buried this when sorting out my thousands of Emails on my return, partly because I had to look up the information! =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= <[EMAIL PROTECTED]> wrote: > > >> | afaik the kernel only sends signals to threads that don't have them

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-24 Thread Gustavo Carneiro
-> http://www.python.org/sf/1564547 -- Gustavo J. A. M. Carneiro "The universe is always one step beyond logic." ___ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/ma

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-13 Thread Gustavo Carneiro
On 9/12/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > On 9/12/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > > On 9/12/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > > > My previous mention of using a *single* flag may survive corruption > > > simply because we can tolerate false positives. Signal h

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-13 Thread Michael Hudson
"Martin v. Löwis" <[EMAIL PROTECTED]> writes: > Michael Hudson schrieb: >>> According to [1], all python needs to do to avoid this problem is >>> block all signals in all but the main thread; >> >> Argh, no: then people who call system() from non-main threads end up >> running subprocesses with a

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Martin v. Löwis
Michael Hudson schrieb: >> According to [1], all python needs to do to avoid this problem is >> block all signals in all but the main thread; > > Argh, no: then people who call system() from non-main threads end up > running subprocesses with all signals masked, which breaks other > things in very

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Martin v. Löwis
Nick Maclaren schrieb: >> (coment by Arjan van de Ven): >> | afaik the kernel only sends signals to threads that don't have them >> blocked. >> | If python doesn't want anyone but the main thread to get signals, it >> should just >> | block signals on all but the main thread and then by nature, al

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Adam Olsen
On 9/12/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > On 9/12/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > > My previous mention of using a *single* flag may survive corruption > > simply because we can tolerate false positives. Signal handlers would > > write 0x, the poll loop would ch

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Adam Olsen
On 9/12/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > On 9/12/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > > My previous mention of using a *single* flag may survive corruption > > simply because we can tolerate false positives. Signal handlers would > > write 0x, the poll loop would ch

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Josiah Carlson
"Adam Olsen" <[EMAIL PROTECTED]> wrote: > > On 9/12/06, Greg Ewing <[EMAIL PROTECTED]> wrote: > > Adam Olsen wrote: > > > > > That brings you back to how you access the flags variable. > > > > The existing signal handler sets a flag, doesn't it? > > So it couldn't be any more broken than the curr

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Gustavo Carneiro
On 9/12/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > On 9/12/06, Greg Ewing <[EMAIL PROTECTED]> wrote: > > Adam Olsen wrote: > > > > > That brings you back to how you access the flags variable. > > > > The existing signal handler sets a flag, doesn't it? > > So it couldn't be any more broken than th

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-12 Thread Adam Olsen
On 9/12/06, Greg Ewing <[EMAIL PROTECTED]> wrote: > Adam Olsen wrote: > > > That brings you back to how you access the flags variable. > > The existing signal handler sets a flag, doesn't it? > So it couldn't be any more broken than the current > implementation. > > If we get too paranoid about thi

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-11 Thread Greg Ewing
Adam Olsen wrote: > That brings you back to how you access the flags variable. The existing signal handler sets a flag, doesn't it? So it couldn't be any more broken than the current implementation. If we get too paranoid about this, we'll just end up deciding that signals can't be used for anyt

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-11 Thread Greg Ewing
Gustavo Carneiro wrote: > The only potential problem left is that, by changing the pipe file > descriptor to non-blocking mode we can only write as many bytes to it > without reading from the other side as the pipe buffer allows. If a > large number of signals arrive very quickly, that buffer ma

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-11 Thread Adam Olsen
On 9/11/06, Greg Ewing <[EMAIL PROTECTED]> wrote: > Gustavo Carneiro wrote: > > The only potential problem left is that, by changing the pipe file > > descriptor to non-blocking mode we can only write as many bytes to it > > without reading from the other side as the pipe buffer allows. If a > >

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-11 Thread Adam Olsen
On 9/11/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > On 9/11/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > > This much would allow a GUI's poll loop to wake up when there is a > > signal, and give control back to the python main loop, which could > > then read off the signals and queue up their

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-11 Thread Gustavo Carneiro
On 9/11/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > Now on to my new proposal. I do still use write(). If you can't > accept that I think we should rip signals out entirely, just let them > kill the process. Not a reliable feature of any OS. > > We create a single pipe and use it for all signals

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-10 Thread Adam Olsen
On 9/9/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: > I can't honestly promise to put any time into this in the forseeable > future, but will try (sometime). If anyone wants to tackle this, > please ask me for comments/help/etc. It took me a while to realize just what was wrong with my proposal,

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-10 Thread Greg Ewing
Jan Kanis wrote: > However, PyGTKs problem does get > solved, as long as there is _a_ thread that returns to the interpreter > within some timeframe. It seems plausible that this will happen. I don't see that this makes the situation much better, as it just shifts the need for polling to anoth

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-09 Thread Jan Kanis
On Sat, 09 Sep 2006 12:59:23 +0200, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > On 9/9/06, Jan Kanis <[EMAIL PROTECTED]> wrote: >> However, PyGTKs problem does get >> solved, as long as there is _a_ thread that returns to the interpreter >> within some timeframe. It seems plausible that this w

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-09 Thread Gustavo Carneiro
On 9/9/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: > I was hoping to have stopped, but here are a few comments. > > I agree with Jan Kanis. That is the way to tackle this one. Alas, it doesn't work in practice, as I already replied. [...] > Despite the implication, the code of Py_AddPendingCa

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-09 Thread Gustavo Carneiro
On 9/9/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > On 9/8/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > > Ensuring modifications to that array are atomic would be tricky, but I > > think it would be doable if we use a read-copy-update approach (with > > two alternating signal handler functions). Not

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-09 Thread Gustavo Carneiro
On 9/9/06, Jan Kanis <[EMAIL PROTECTED]> wrote: > At the risk of waking up a thread that was already declared dead, but > perhaps this is usefull. > > So, what happens is pythons signal handler sets a flag and registrers a > callback. Then the main thread should check the flag and make the callback

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-09 Thread Nick Maclaren
I was hoping to have stopped, but here are a few comments. I agree with Jan Kanis. That is the way to tackle this one. "Adam Olsen" <[EMAIL PROTECTED]> wrote: > > I don't think we should let this die, at least not yet. Nick seems to > be arguing that ANY signal handler is prone to rand

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-08 Thread Adam Olsen
On 9/8/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > Ensuring modifications to that array are atomic would be tricky, but I > think it would be doable if we use a read-copy-update approach (with > two alternating signal handler functions). Not sure how to ensure > there's no currently running signal

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-08 Thread Adam Olsen
On 9/8/06, Jan Kanis <[EMAIL PROTECTED]> wrote: > At the risk of waking up a thread that was already declared dead, but > perhaps this is usefull. I don't think we should let this die, at least not yet. Nick seems to be arguing that ANY signal handler is prone to random crashes or corruption (due

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-08 Thread Jan Kanis
At the risk of waking up a thread that was already declared dead, but perhaps this is usefull. So, what happens is pythons signal handler sets a flag and registrers a callback. Then the main thread should check the flag and make the callback to actually do something with the signal. However

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-06 Thread Michael Hudson
"Gustavo Carneiro" <[EMAIL PROTECTED]> writes: > On 9/4/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: >> "Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: >> > I am now thinking of something along these lines: >> > typedef void (*PyPendingCallNotify)(void *user_data); >> > PyAPI_FUNC(void) Py_AddPend

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Gustavo Carneiro
On 9/5/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: [...] > Even if write is atomic, there are gotchas. What if the interrupted > code is doing something to that file at the time? Are you SURE that > an unexpected operation on it (in the same thread) won't cause the > library function of program

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Nick Maclaren
Johan Dahlin <[EMAIL PROTECTED]> wrote: > > Are you saying that we should let less commonly used platforms dictate > features and functionality for the popular ones? > I mean, who uses HP/UX, SCO and [insert your favorite flavor] as a modern > desktop system where this particular bug makes a differ

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Scott David Daniels
Johan Dahlin wrote: > Nick Maclaren wrote: >> "Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: >>> I'm pretty sure writing to a pipe is async signal safe. It is the >>> oldest trick in the book, everyone uses it. I ... know that it works. >> Ah. Well, I can assure you that it's not the oldes

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Johan Dahlin
Nick Maclaren wrote: > "Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: >> Anyway, I was speaking hypothetically. I'm pretty sure writing to a >> pipe is async signal safe. It is the oldest trick in the book, >> everyone uses it. I don't have to see a written signed contract to >> know that it work

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Nick Maclaren
"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > Anyway, I was speaking hypothetically. I'm pretty sure writing to a > pipe is async signal safe. It is the oldest trick in the book, > everyone uses it. I don't have to see a written signed contract to > know that it works. Ah. Well, I can assu

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Gustavo Carneiro
On 9/5/06, Adam Olsen <[EMAIL PROTECTED]> wrote: > On 9/4/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > > Now, we've had this API for a long time already (at least 2.5 > > years). I'm pretty sure it works well enough on most *nix systems. > > Event if it works 99% of the times, it's way bett

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-05 Thread Nick Maclaren
"Adam Olsen" <[EMAIL PROTECTED]> wrote: > On 9/4/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > > > Now, we've had this API for a long time already (at least 2.5 > > years). I'm pretty sure it works well enough on most *nix systems. > > Event if it works 99% of the times, it's way better tha

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Adam Olsen
On 9/4/06, Gustavo Carneiro <[EMAIL PROTECTED]> wrote: > Now, we've had this API for a long time already (at least 2.5 > years). I'm pretty sure it works well enough on most *nix systems. > Event if it works 99% of the times, it's way better than *failing* > *100%* of the times, which is what ha

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Adam Olsen
On 9/4/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: > Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > > On Mon, 04 Sep 2006 17:24:56 +0100, > > David Hopwood <[EMAIL PROTECTED] > > der.co.uk> wrote: > > >Jean-Paul Calderone wrote: > > >> PyGTK would presumably implement its pending call callback b

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Gustavo Carneiro
In GLib we have a child watch notification feature that relies on the following signal handler: static void g_child_watch_signal_handler (int signum) { child_watch_count ++; if (child_watch_init_state == CHILD_WATCH_INITIALIZED_THREADED) { write (child_watch_wake_up_pipe[1], "B",

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Nick Maclaren
Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > > Thanks for expounding. Given that it is basically impossible to do > anything useful in a signal handler according to the relevant standards > (does Python's current signal handler even avoid relying on undefined > behavior?), how would you sugge

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Jean-Paul Calderone
On Mon, 04 Sep 2006 18:18:41 +0100, Nick Maclaren <[EMAIL PROTECTED]> wrote: >Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: >> On Mon, 04 Sep 2006 17:24:56 +0100, >> David Hopwood <[EMAIL PROTECTED] >> der.co.uk> wrote: >> >Jean-Paul Calderone wrote: >> >> PyGTK would presumably implement its pend

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread David Hopwood
Jean-Paul Calderone wrote: > On Mon, 04 Sep 2006 17:24:56 +0100, David Hopwood <[EMAIL PROTECTED]> wrote: > >>Jean-Paul Calderone wrote: >> >>>PyGTK would presumably implement its pending call callback by writing a >>>byte to a pipe which it is also passing to poll(). >> >>But doing that in a sign

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Nick Maclaren
Jean-Paul Calderone <[EMAIL PROTECTED]> wrote: > On Mon, 04 Sep 2006 17:24:56 +0100, > David Hopwood <[EMAIL PROTECTED] > der.co.uk> wrote: > >Jean-Paul Calderone wrote: > >> PyGTK would presumably implement its pending call callback by writing a > >> byte to a pipe which it is also passing to poll

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Jean-Paul Calderone
On Mon, 04 Sep 2006 17:24:56 +0100, David Hopwood <[EMAIL PROTECTED]> wrote: >Jean-Paul Calderone wrote: >> PyGTK would presumably implement its pending call callback by writing a >> byte to a pipe which it is also passing to poll(). > >But doing that in a signal handler context invokes undefined b

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread David Hopwood
Jean-Paul Calderone wrote: > PyGTK would presumably implement its pending call callback by writing a > byte to a pipe which it is also passing to poll(). But doing that in a signal handler context invokes undefined behaviour according to POSIX. -- David Hopwood <[EMAIL PROTECTED]>

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Nick Maclaren
"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > You guys are tough customers to please. I am just trying to solve a > problem here, not create a new one; you have to believe me. Oh, I believe you. Look at it this way. You are trying to resolve the problem that your farm is littered with clu

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread David Hopwood
Gustavo Carneiro wrote: > OK, let's review what we know about current python, signals, and threads: > > 1. Python launches threads without touching sigprocmask; > 2. Python installs signal handlers for all signals; > 3. Signals can be delivered to any thread, let's assume (because

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Jean-Paul Calderone
On Mon, 04 Sep 2006 15:05:56 +0100, Nick Maclaren <[EMAIL PROTECTED]> wrote: >"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: >> >> That's a very good point; I wasn't aware that child processes >> inherited the signals mask from their parent processes. > >That's one of the few places where POSIX does

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Anthony Baxter
On Tuesday 05 September 2006 00:52, Gustavo Carneiro wrote: > 3. Signals can be delivered to any thread, let's assume (because > of point #1 and not others not mentioned) that we have no control over > which threads receive which signals, might as well be random for all > we know; Note that

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Gustavo Carneiro
On 9/4/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: > "Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > I am now thinking of something along these lines: > > typedef void (*PyPendingCallNotify)(void *user_data); > > PyAPI_FUNC(void) Py_AddPendingCallNotify(PyPendingCallNotify callback, > > vo

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Anthony Baxter
On Tuesday 05 September 2006 00:05, Nick Maclaren wrote: > Anthony Baxter isn't exaggerating the problem, despite what you may > think from his posting. If the SF bugtracker had a better search interface, you could see why I have such a bleak view of this area of Python. What's there now *mostly*

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Nick Maclaren
Chris McDonough <[EMAIL PROTECTED]> wrote: > > Would adding an API for sigprocmask help here? No. sigprocmask is a large part of the problem. Regards, Nick Maclaren, University of Cambridge Computing Service, New Museums Site, Pembroke Street, Cambridge CB2 3QH, England. Email: [EMAIL PROTECTE

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Nick Maclaren
"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > That's a very good point; I wasn't aware that child processes > inherited the signals mask from their parent processes. That's one of the few places where POSIX does describe what happens. Well, usually. You really don't want to know what happens

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Gustavo Carneiro
On 9/4/06, Michael Hudson <[EMAIL PROTECTED]> wrote: > "Gustavo Carneiro" <[EMAIL PROTECTED]> writes: > > > According to [1], all python needs to do to avoid this problem is > > block all signals in all but the main thread; > > Argh, no: then people who call system() from non-main threads end up >

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Michael Hudson
"Gustavo Carneiro" <[EMAIL PROTECTED]> writes: > According to [1], all python needs to do to avoid this problem is > block all signals in all but the main thread; Argh, no: then people who call system() from non-main threads end up running subprocesses with all signals masked, which breaks other

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-04 Thread Anthony Baxter
On Saturday 02 September 2006 22:10, Gustavo Carneiro wrote: > According to [1], all python needs to do to avoid this problem is > block all signals in all but the main thread; then we can guarantee > signal handlers are always called from the main thread, and pygtk > doesn't need a timeout. > B

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-03 Thread Chris McDonough
Would adding an API for sigprocmask help here? (Although it has been tried before -- http://mail.python.org/ pipermail/python-dev/2003-February/033016.html and died in the womb due to threading-related issues -- http://mail.mems-exchange.org/ durusmail/quixote-users/1248/) - C On Sep 2, 2006

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-02 Thread Nick Maclaren
"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > Oh, sorry, here's the comment: > > (coment by Arjan van de Ven): > | afaik the kernel only sends signals to threads that don't have them blocked. > | If python doesn't want anyone but the main thread to get signals, it > should just > | block si

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-02 Thread Gustavo Carneiro
On 9/2/06, Nick Maclaren <[EMAIL PROTECTED]> wrote: > According to [1], all python needs to do to avoid this problem is > block all signals in all but the main thread; then we can guarantee > signal handlers are always called from the main thread, and pygtk > doesn't need a timeout. 1) That page

Re: [Python-Dev] Signals, threads, blocking C functions

2006-09-02 Thread Nick Maclaren
"Gustavo Carneiro" <[EMAIL PROTECTED]> wrote: > > We have to resort to timeouts in pygtk in order to catch unix signals > in threaded mode. A common defect of modern designs - TCP/IP is particularly objectionable in this respect, but that battle was lost and won over two decades ago :-( > The re

[Python-Dev] Signals, threads, blocking C functions

2006-09-02 Thread Gustavo Carneiro
We have to resort to timeouts in pygtk in order to catch unix signals in threaded mode. The reason is this. We call gtk_main() (mainloop function) which blocks forever. Suppose there are threads in the program; then any thread can receive a signal (e.g. SIGINT). Python catches the signal, but do