sagemath / cysignals

cysignals: interrupt and signal handling for Cython
GNU Lesser General Public License v3.0
44 stars 23 forks source link

PSelecter test fails on aarch64 #159

Open saraedum opened 2 years ago

saraedum commented 2 years ago

This doctest of PSelecter fails on aarch64 (at least when running with qemu:)

        >>> from cysignals import AlarmInterrupt
        >>> from cysignals.pselect import PSelecter
        >>> import os, signal, time
        >>> with PSelecter([signal.SIGHUP, signal.SIGALRM]) as sel:
        ...     os.kill(os.getpid(), signal.SIGALRM)
        ...     time.sleep(0.5)  # Simply sleep, no interrupt detected
        ...     try:
        ...         _ = sel.sleep(1)  # Interrupt seen here
        ...     except AlarmInterrupt:
        ...         print("Interrupt OK")
        Interrupt OK

Namely, this throws an AlarmInterrupt, I guess before the try block.

The verbose output from a CI run is:

2021-12-02T06:49:33.4949218Z Trying:
2021-12-02T06:49:33.4949643Z     with PSelecter([signal.SIGHUP, signal.SIGALRM]) as sel:
2021-12-02T06:49:33.4950099Z         os.kill(os.getpid(), signal.SIGALRM)
2021-12-02T06:49:33.4950538Z         time.sleep(0.5)  # Simply sleep, no interrupt detected
2021-12-02T06:49:33.4950925Z         try:
2021-12-02T06:49:33.4951310Z             _ = sel.sleep(1)  # Interrupt seen here
2021-12-02T06:49:33.4951710Z         except AlarmInterrupt:
2021-12-02T06:49:33.4952107Z             print("Interrupt OK")
2021-12-02T06:49:33.4952465Z Expecting:
2021-12-02T06:49:33.4952785Z     Interrupt OK
2021-12-02T06:49:34.0024344Z Test src/cysignals/pselect.pyx failed with a <class 'cysignals.signals.AlarmInterrupt'> error: 

The full CI run is here.

This is from a mildly patched cysignals 1.11.0, for packaging for conda-forge, see https://github.com/conda-forge/cysignals-feedstock/pull/35.

The patches applied were:

diff --git a/configure.ac b/configure.ac index 2910f9b..07f81a0 100644 --- a/configure.ac +++ b/configure.ac @@ -55,6 +55,9 @@ AC_RUN_IFELSE([AC_LANG_PROGRAM([[]], [[asm("leal (%eax), %eax; emms");]])], , dnl NO [AC_MSG_RESULT([no])]