Skip to content

Commit 632d589

Browse files
[3.10] bpo-41498: Fix build on platforms without sigset_t (GH-29770) (GH-29773)
(cherry picked from commit dc19e86) Co-authored-by: Christian Heimes <[email protected]> Automerge-Triggered-By: GH:tiran
1 parent c72311d commit 632d589

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Python now compiles on platforms without ``sigset_t``. Several functions
2+
in :mod:`signal` are not available when ``sigset_t`` is missing.
3+
4+
Based on patch by Roman Yurchak for pyodide.

Modules/clinic/signalmodule.c.h

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Modules/posixmodule.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5930,6 +5930,7 @@ parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpg
59305930

59315931
}
59325932

5933+
#ifdef HAVE_SIGSET_T
59335934
if (setsigmask) {
59345935
sigset_t set;
59355936
if (!_Py_Sigset_Converter(setsigmask, &set)) {
@@ -5955,6 +5956,13 @@ parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpg
59555956
}
59565957
all_flags |= POSIX_SPAWN_SETSIGDEF;
59575958
}
5959+
#else
5960+
if (setsigmask || setsigdef) {
5961+
PyErr_SetString(PyExc_NotImplementedError,
5962+
"sigset is not supported on this platform");
5963+
goto fail;
5964+
}
5965+
#endif
59585966

59595967
if (scheduler) {
59605968
#ifdef POSIX_SPAWN_SETSCHEDULER

Modules/posixmodule.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ PyAPI_FUNC(int) _Py_Gid_Converter(PyObject *, gid_t *);
2323
# define HAVE_SIGSET_T
2424
#endif
2525

26-
#ifdef HAVE_SIGSET_T
2726
PyAPI_FUNC(int) _Py_Sigset_Converter(PyObject *, void *);
28-
#endif /* HAVE_SIGSET_T */
2927
#endif /* Py_LIMITED_API */
3028

3129
#ifdef __cplusplus

Modules/signalmodule.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ module signal
5858
[clinic start generated code]*/
5959
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b0301a3bde5fe9d3]*/
6060

61+
#ifdef HAVE_SETSIG_T
62+
6163
/*[python input]
6264
6365
class sigset_t_converter(CConverter):
@@ -66,6 +68,7 @@ class sigset_t_converter(CConverter):
6668
6769
[python start generated code]*/
6870
/*[python end generated code: output=da39a3ee5e6b4b0d input=b5689d14466b6823]*/
71+
#endif
6972

7073
/*
7174
NOTES ON THE INTERACTION BETWEEN SIGNALS AND THREADS
@@ -930,6 +933,7 @@ signal_getitimer_impl(PyObject *module, int which)
930933
#endif // HAVE_GETITIMER
931934

932935

936+
#ifdef HAVE_SIGSET_T
933937
#if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGPENDING)
934938
static PyObject*
935939
sigset_to_set(sigset_t mask)
@@ -1061,9 +1065,9 @@ signal_sigwait_impl(PyObject *module, sigset_t sigset)
10611065
}
10621066

10631067
#endif /* #ifdef HAVE_SIGWAIT */
1068+
#endif /* #ifdef HAVE_SIGSET_T */
10641069

1065-
1066-
#if defined(HAVE_SIGFILLSET) || defined(MS_WINDOWS)
1070+
#if (defined(HAVE_SIGFILLSET) && defined(HAVE_SIGSET_T)) || defined(MS_WINDOWS)
10671071

10681072
/*[clinic input]
10691073
signal.valid_signals
@@ -1101,7 +1105,8 @@ signal_valid_signals_impl(PyObject *module)
11011105
#endif
11021106
}
11031107

1104-
#endif /* #if defined(HAVE_SIGFILLSET) || defined(MS_WINDOWS) */
1108+
#endif /* #if (defined(HAVE_SIGFILLSET) && defined(HAVE_SIGSET_T)) || defined(MS_WINDOWS) */
1109+
11051110

11061111

11071112
#if defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT)
@@ -1166,6 +1171,7 @@ fill_siginfo(siginfo_t *si)
11661171
}
11671172
#endif
11681173

1174+
#ifdef HAVE_SIGSET_T
11691175
#ifdef HAVE_SIGWAITINFO
11701176

11711177
/*[clinic input]
@@ -1268,6 +1274,7 @@ signal_sigtimedwait_impl(PyObject *module, sigset_t sigset,
12681274
}
12691275

12701276
#endif /* #ifdef HAVE_SIGTIMEDWAIT */
1277+
#endif /* #ifdef HAVE_SIGSET_T */
12711278

12721279

12731280
#if defined(HAVE_PTHREAD_KILL)

0 commit comments

Comments
 (0)