Skip to content

Commit 644cfdf

Browse files
committed
explicitly accept setpgroup=None
1 parent 1ad5f6d commit 644cfdf

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

Lib/test/test_os/test_posix.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,11 @@ def test_setpgroup(self):
19961996
)
19971997
support.wait_process(pid, exitcode=0)
19981998

1999+
def test_setpgroup_allow_none(self):
2000+
path, args = self.NOOP_PROGRAM[0], self.NOOP_PROGRAM
2001+
self.spawn_func(path, args, os.environ, setpgroup=None)
2002+
support.wait_process(pid, exitcode=0)
2003+
19992004
def test_setpgroup_wrong_type(self):
20002005
with self.assertRaises(TypeError):
20012006
self.spawn_func(sys.executable,
@@ -2096,8 +2101,13 @@ def test_setsigdef_wrong_type(self):
20962101
[sys.executable, "-c", "pass"],
20972102
os.environ, setsigdef=[signal.NSIG, signal.NSIG+1])
20982103

2104+
def test_scheduler_allow_none(self):
2105+
path, args = self.NOOP_PROGRAM[0], self.NOOP_PROGRAM
2106+
pid = self.spawn_func(path, args, os.environ, scheduler=None)
2107+
support.wait_process(pid, exitcode=0)
2108+
20992109
@support.subTests("scheduler", [object(), 1, [1, 2]])
2100-
def test_invalid_scheduler_param(self, scheduler):
2110+
def test_scheduler_wrong_type(self, scheduler):
21012111
path, args = self.NOOP_PROGRAM[0], self.NOOP_PROGRAM
21022112
with self.assertRaisesRegex(
21032113
TypeError,

Modules/clinic/posixmodule.c.h

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

Modules/posixmodule.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7611,7 +7611,7 @@ parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpg
76117611
PyObject *setsigdef, PyObject *scheduler,
76127612
posix_spawnattr_t *attrp)
76137613
{
7614-
assert(scheduler == NULL || PyTuple_Check(scheduler));
7614+
assert(scheduler == NULL || scheduler == Py_None || PyTuple_Check(scheduler));
76157615
long all_flags = 0;
76167616

76177617
errno = posix_spawnattr_init(attrp);
@@ -7620,7 +7620,7 @@ parse_posix_spawn_flags(PyObject *module, const char *func_name, PyObject *setpg
76207620
return -1;
76217621
}
76227622

7623-
if (setpgroup) {
7623+
if (setpgroup && setpgroup != Py_None) {
76247624
pid_t pgid = PyLong_AsPid(setpgroup);
76257625
if (pgid == (pid_t)-1 && PyErr_Occurred()) {
76267626
goto fail;
@@ -7918,7 +7918,7 @@ py_posix_spawn(int use_posix_spawnp, PyObject *module, path_t *path, PyObject *a
79187918
goto exit;
79197919
}
79207920

7921-
if (!PyTuple_Check(scheduler) && scheduler != Py_None) {
7921+
if (scheduler && !PyTuple_Check(scheduler) && scheduler != Py_None) {
79227922
PyErr_Format(PyExc_TypeError,
79237923
"%s: scheduler must be a tuple or None", func_name);
79247924
goto exit;
@@ -8035,7 +8035,7 @@ os.posix_spawn
80358035
*
80368036
file_actions: object(c_default='NULL') = ()
80378037
A sequence of file action tuples.
8038-
setpgroup: object = NULL
8038+
setpgroup: object(c_default='NULL') = None
80398039
The pgroup to use with the POSIX_SPAWN_SETPGROUP flag.
80408040
resetids: bool = False
80418041
If the value is `true` the POSIX_SPAWN_RESETIDS will be activated.
@@ -8057,7 +8057,7 @@ os_posix_spawn_impl(PyObject *module, path_t *path, PyObject *argv,
80578057
PyObject *setpgroup, int resetids, int setsid,
80588058
PyObject *setsigmask, PyObject *setsigdef,
80598059
PyObject *scheduler)
8060-
/*[clinic end generated code: output=14a1098c566bc675 input=242939f993243c45]*/
8060+
/*[clinic end generated code: output=14a1098c566bc675 input=69e7c9ebbdcf94a5]*/
80618061
{
80628062
return py_posix_spawn(0, module, path, argv, env, file_actions,
80638063
setpgroup, resetids, setsid, setsigmask, setsigdef,
@@ -8081,7 +8081,7 @@ os.posix_spawnp
80818081
*
80828082
file_actions: object(c_default='NULL') = ()
80838083
A sequence of file action tuples.
8084-
setpgroup: object = NULL
8084+
setpgroup: object(c_default='NULL') = None
80858085
The pgroup to use with the POSIX_SPAWN_SETPGROUP flag.
80868086
resetids: bool = False
80878087
If the value is `True` the POSIX_SPAWN_RESETIDS will be activated.
@@ -8103,7 +8103,7 @@ os_posix_spawnp_impl(PyObject *module, path_t *path, PyObject *argv,
81038103
PyObject *setpgroup, int resetids, int setsid,
81048104
PyObject *setsigmask, PyObject *setsigdef,
81058105
PyObject *scheduler)
8106-
/*[clinic end generated code: output=7b9aaefe3031238d input=e77db185549d088c]*/
8106+
/*[clinic end generated code: output=7b9aaefe3031238d input=a5c057527c6881a5]*/
81078107
{
81088108
return py_posix_spawn(1, module, path, argv, env, file_actions,
81098109
setpgroup, resetids, setsid, setsigmask, setsigdef,

0 commit comments

Comments
 (0)