FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

bpo-20104: Add flag capabilities to posix_spawn by pablogsal · Pull Request #6693 · python/cpython · GitHub

Repository navigation

bpo-20104: Add flag capabilities to posix_spawn - #6693

Merged
pablogsal merged 11 commits into
python:masterfrom
pablogsal:complete_posix_spawn
Sep 7, 2018
Merged

pablogsal merged 11 commits into
python:masterfrom
pablogsal:complete_posix_spawn

Conversation

pablogsal commented May 2, 2018 •
edited by bedevere-bot
Loading

Copy link
Copy Markdown
Member

pablogsal force-pushed the complete_posix_spawn branch 3 times, most recently from b838fd6 to eec6215 Compare May 2, 2018 11:07

Copy link
Copy Markdown
Member Author

@vstinner @serhiy-storchaka Please, review and once we are happy with the interface and implementation we can add new tests for the flags in this PR.

pablogsal changed the title bpo-20104: Add flag capabilities to posix_spawn bpo-20104: Add flag capabilities to posix_spawn DO NOT MERGE May 2, 2018

pablogsal commented May 2, 2018 •
edited
Loading

Copy link
Copy Markdown
Member Author

This implementation is missing setting the POSIX_SPAWN_SETSCHEDPARAM flag implementation because I am not sure what is the best way to actually implement the interface to set the scheduler parameters unsing posix_spawnattr_setschedparam. Any ideas?

pablogsal force-pushed the complete_posix_spawn branch 11 times, most recently from 6946cd3 to 55d1b3d Compare May 2, 2018 18:04
gpshead requested a review from serhiy-storchaka May 2, 2018 21:49

Copy link
Copy Markdown
Member Author

@gpshead @serhiy-storchaka I have implemented the existing flags as keyword-only arguments as suggested in the issue. The question of what to do with POSIX_SPAWN_SETSCHEDPARAM remains.

pablogsal force-pushed the complete_posix_spawn branch 2 times, most recently from 395e7af to 457ea58 Compare May 5, 2018 19:22
Comment thread Modules/posixmodule.c Outdated

pablogsal May 5, 2018 •
edited
Loading

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Notice that in case that non of the flags are set the attr object is still created (with no flags or arguments set). This is to avoid wrapping these lines in

    if ((setpgroup != Py_None) | (resetids != Py_True) | (setsigmask != Py_None)
        | (setsigdef != Py_None) | (setscheduller != Py_None) ) {
                   ...
     }

As far as I understand there is no different between this and passing NULL to posix_spawn.

pablogsal force-pushed the complete_posix_spawn branch 4 times, most recently from 31bb4bc to 98e005a Compare May 6, 2018 00:18
Comment thread Modules/posixmodule.c Outdated

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Notice that this same function exists in Modules/signalmodule.c but is private (static). I did not want to export that symbol in libpython so I recreated the function here. Please, advise if you think a header/extern declaration should be created and the function should be exported (in this case we will need to name it properly).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

This is fine. A future refactoring can combine these if ever desired (and if both extension modules are statically linked, a good linker would merge them as being identical anyways).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

though I see Serhiy diagreeing, follow his lead.

pablogsal force-pushed the complete_posix_spawn branch from f0bd16d to dcf9ffc Compare May 14, 2018 13:17

Copy link
Copy Markdown
Member

Please regenerate the clinic file.

pablogsal force-pushed the complete_posix_spawn branch from dcf9ffc to e605b01 Compare June 15, 2018 16:33

Copy link
Copy Markdown
Member Author

@serhiy-storchaka I had to rebase onto the latest master to pick up the latest changes and solve the merge conflict of the clinic file. I have done that and regenerated it.

Copy link
Copy Markdown
Member

Please merge with the master again and regenerate the clinic file.

pablogsal force-pushed the complete_posix_spawn branch from e605b01 to 8fb0389 Compare July 20, 2018 09:57

Copy link
Copy Markdown
Member Author

@serhiy-storchaka Done!

Comment thread Lib/test/test_posix.py Outdated
with self.assertRaises(TypeError):
posix.posix_spawn(sys.executable,
[sys.executable, "-c", "pass"],
os.environ, resetids=0)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

What's the rationale for rejecting 0 as false? resetids=0 seems legit to me.

Why not using "bool" type for this parameter? Something like:

@@ -5416,7 +5411,7 @@ os.posix_spawn
     *
     setpgroup: object = NULL
         The pgroup to use with the POSIX_SPAWN_SETPGROUP flag.
-    resetids: object = False
+    resetids: bool = False
         If the value is `True` the POSIX_SPAWN_RESETIDS will be activated.
     setsigmask: object(c_default='NULL') = ()
         The sigmask to use with the POSIX_SPAWN_SETSIGMASK flag.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

If we use bool then the truthiness value of the object will be used. This will allow the user to pass anything there (ant the boolean value of the argument will be used), right?

I would prefer to pass only True or False (maybe 0 and 1 as well) but not any object.

Comment thread Lib/test/test_posix.py Outdated
with self.assertRaises(ValueError):
posix.posix_spawn(sys.executable,
[sys.executable, "-c", "pass"],
os.environ, setsigmask=[9998, 9999])

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I would prefer a more explicit signal.NSIG rather than arbitrary integer 9999. Maybe [signal.NSIG, signal.NSIG+1]?

Comment thread Lib/test/test_posix.py Outdated

pid2, status = os.waitpid(pid, 0)
self.assertEqual(pid2, pid)
self.assertNotEqual(status, 0)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I would suggest a stricter test:

    self.assertTrue(os.WIFSIGNALED(status), status)
    self.assertEqual(os.WTERMSIG(status), signal.SIGUSR1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

done

Copy link
Copy Markdown

When you're done making the requested changes, leave the comment: I have made the requested changes; please review again.

Copy link
Copy Markdown
Member

The overall change LGTM, but I have a few questions/suggestions.

Comment thread Doc/library/os.rst


.. function:: posix_spawn(path, argv, env, file_actions=None)
.. function:: posix_spawn(path, argv, env, file_actions=None, /, *, \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I don't believe this / should be here.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

See #6725.

Copy link
Copy Markdown
Member Author

I have made the requested changes; please review again

Copy link
Copy Markdown

Thanks for making the requested changes!

@vstinner, @serhiy-storchaka: please review the changes made to this pull request.

vstinner left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

LGTM.

vstinner commented Sep 7, 2018

Copy link
Copy Markdown
Member

Yeah! It's now time to see how to use it in subprocess :-)

Copy link
Copy Markdown
Member

I don't see a use case for it in the stdlib.

vstinner commented Sep 9, 2018 via email

Copy link
Copy Markdown
Member

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type-feature A feature request or enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants


Back | FazBrowse Home | New Git URL