This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients lemburg, serhiy.storchaka
Date 2019-03-21.06:32:57
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1553149977.89.0.0620101720438.issue36387@roundup.psfhosted.org>
In-reply-to
Content
Function getenvironment() in Modules/_winapi.c is used for converting the environment mapping to the wchar_t string for passing to CreateProcessW(). It performs the following steps:

* Allocate a Py_UCS4 buffer and copy all keys and values, converting them to Py_UCS4.
* Create a PyUnicode object from the Py_UCS4 buffer.
* Create a wchar_t buffer from the PyUnicode object (unless it has the UCS2 kind).

The proposed PR makes it performing a single steps:

* Allocate a wchar_t buffer and copy all keys and values, converting them to wchar_t.

This needs less memory allocations and smaller memory consumption. In most cases this needs also less and faster memory scans and copies.

In addition, the PR replaces PySequence_Fast C API with faster PyList C API. In the past PyMapping_Keys() and PyMapping_Values() could return a tuple in unlikely case, but now they always return a list (see issue 28280).

The current code uses the legacy Unicode C API, while the new code uses the newer (added in 3.3) wchar_t based Unicode C API, so something similar to this change should be made sooner or later.
History
Date User Action Args
2019-03-21 06:32:57serhiy.storchakasetrecipients: + serhiy.storchaka, lemburg
2019-03-21 06:32:57serhiy.storchakasetmessageid: <1553149977.89.0.0620101720438.issue36387@roundup.psfhosted.org>
2019-03-21 06:32:57serhiy.storchakalinkissue36387 messages
2019-03-21 06:32:57serhiy.storchakacreate