[Python-Dev] threads, SIGINT and time.sleep()

Michael Hudson mwh@python.net
15 Jul 2002 11:03:33 +0100


"Mark Hammond" <mhammond@skippinet.com.au> writes:

> Tim and I have been thrashing around in http://python.org/sf/581232 trying
> to make time.sleep() interruptible for Windows.  This turns out to be quite
> simple, but has unearthed some questions about thread interactions, and
> seems to have changed semantics on Linux.
> 
> While I understand that the docs make almost no guarantees WRT threads and
> signals, 

Don't go there.

> I am wondering what the "most desirable" semantics would be assuming
> the platform supports it.
> 
> Consider a Python program with a main thread + 2 extra threads.  The 2 extra
> threads are both in time.sleep().  When Ctrl+C is pressed, the docs seem to
> clearly state that only the main thread should see a KeyboardInterrupt.  My
> question is: what should happen to the time.sleep() threads?
> 
> It seems that Python 1.5.2 on Linux (as supplied by RedHat) would interrupt
> the 2 threads with IOError(EINTR).  CVS Python currently seems to not
> interrupt the threads at all, allowing the sleep() to continue the full
> period.  (A time.sleep() in the main thread *is* interrupted in both
> versions)

Are you saying that your patch changes behaviour, or that behaviour
changed somewhere between 1.5.2 and current CVS?  Or between 2.2 and
current CVS?

These lines:

        /* Mask all signals in the current thread before creating the new
         * thread.  This causes the new thread to start with all signals
         * blocked.
         */
        sigfillset(&newmask);
        SET_THREAD_SIGMASK(SIG_BLOCK, &newmask, &oldmask);

might have something to do with it.  Does anyone know where they come from?

> For Windows I can do either.  However, the Python 1.5.2 semantics seems to
> make the most sense to me.  Was this change in behaviour post 1.5
> intentional?  The code does not imply the new behaviour is intented (but the
> code doesn't imply much at all!)

I'd expect the 1.5.2 semantics, but ...

> Test code and results below.  All clues welcomed!

Well, the behaviour is probably (pairwise) different on FreeBSD,
Darwin and Solaris.

"Cheers",
M.

-- 
  Gullible editorial staff continues to post links to any and all
  articles that vaguely criticize Linux in any way.
         -- Reason #4 for quitting slashdot today, from
            http://www.cs.washington.edu/homes/klee/misc/slashdot.html