2626#include "pycore_object.h" // _PyObject_LookupSpecial()
2727#include "pycore_pylifecycle.h" // _PyOS_URandom()
2828#include "pycore_pystate.h" // _PyInterpreterState_GET()
29+ #include "pycore_pyatomic_ft_wrappers.h" // FT_MUTEX_LOCK()
2930#include "pycore_signal.h" // Py_NSIG
3031#include "pycore_time.h" // _PyLong_FromTime_t()
3132#include "pycore_tuple.h" // _PyTuple_FromPairSteal
@@ -16841,32 +16842,24 @@ typedef struct {
1684116842
1684216843#define ScandirIterator_CAST(op) ((ScandirIterator *)(op))
1684316844
16844- #ifdef Py_GIL_DISABLED
16845- # define SCANDIR_ITERATOR_LOCK(iterator) PyMutex_Lock(&(iterator)->mutex)
16846- # define SCANDIR_ITERATOR_UNLOCK(iterator) PyMutex_Unlock(&(iterator)->mutex)
16847- #else
16848- # define SCANDIR_ITERATOR_LOCK(iterator) ((void)0)
16849- # define SCANDIR_ITERATOR_UNLOCK(iterator) ((void)0)
16850- #endif
16851-
1685216845#ifdef MS_WINDOWS
1685316846
1685416847static int
1685516848ScandirIterator_is_closed(ScandirIterator *iterator)
1685616849{
16857- SCANDIR_ITERATOR_LOCK( iterator);
16850+ FT_MUTEX_LOCK(& iterator->mutex );
1685816851 int closed = iterator->handle == INVALID_HANDLE_VALUE;
16859- SCANDIR_ITERATOR_UNLOCK( iterator);
16852+ FT_MUTEX_UNLOCK(& iterator->mutex );
1686016853 return closed;
1686116854}
1686216855
1686316856static void
1686416857ScandirIterator_closedir(ScandirIterator *iterator)
1686516858{
16866- SCANDIR_ITERATOR_LOCK( iterator);
16859+ FT_MUTEX_LOCK(& iterator->mutex );
1686716860 HANDLE handle = iterator->handle;
1686816861 iterator->handle = INVALID_HANDLE_VALUE;
16869- SCANDIR_ITERATOR_UNLOCK( iterator);
16862+ FT_MUTEX_UNLOCK(& iterator->mutex );
1687016863
1687116864 if (handle != INVALID_HANDLE_VALUE) {
1687216865 Py_BEGIN_ALLOW_THREADS
@@ -16884,7 +16877,7 @@ ScandirIterator_iternext(PyObject *op)
1688416877 DWORD error = ERROR_SUCCESS;
1688516878 int found = 0;
1688616879
16887- SCANDIR_ITERATOR_LOCK( iterator);
16880+ FT_MUTEX_LOCK(& iterator->mutex );
1688816881 /* Happens if the iterator is iterated twice, or closed explicitly */
1688916882 while (iterator->handle != INVALID_HANDLE_VALUE) {
1689016883 if (!iterator->first_time) {
@@ -16911,7 +16904,7 @@ ScandirIterator_iternext(PyObject *op)
1691116904
1691216905 /* Loop till we get a non-dot directory or finish iterating */
1691316906 }
16914- SCANDIR_ITERATOR_UNLOCK( iterator);
16907+ FT_MUTEX_UNLOCK(& iterator->mutex );
1691516908
1691616909 if (found) {
1691716910 PyObject *module = PyType_GetModule(Py_TYPE(iterator));
@@ -16935,19 +16928,19 @@ ScandirIterator_iternext(PyObject *op)
1693516928static int
1693616929ScandirIterator_is_closed(ScandirIterator *iterator)
1693716930{
16938- SCANDIR_ITERATOR_LOCK( iterator);
16931+ FT_MUTEX_LOCK(& iterator->mutex );
1693916932 int closed = iterator->dirp == NULL;
16940- SCANDIR_ITERATOR_UNLOCK( iterator);
16933+ FT_MUTEX_UNLOCK(& iterator->mutex );
1694116934 return closed;
1694216935}
1694316936
1694416937static void
1694516938ScandirIterator_closedir(ScandirIterator *iterator)
1694616939{
16947- SCANDIR_ITERATOR_LOCK( iterator);
16940+ FT_MUTEX_LOCK(& iterator->mutex );
1694816941 DIR *dirp = iterator->dirp;
1694916942 iterator->dirp = NULL;
16950- SCANDIR_ITERATOR_UNLOCK( iterator);
16943+ FT_MUTEX_UNLOCK(& iterator->mutex );
1695116944
1695216945 if (dirp != NULL) {
1695316946 Py_BEGIN_ALLOW_THREADS
@@ -16977,7 +16970,7 @@ ScandirIterator_iternext(PyObject *op)
1697716970 unsigned char d_type = 0;
1697816971#endif
1697916972
16980- SCANDIR_ITERATOR_LOCK( iterator);
16973+ FT_MUTEX_LOCK(& iterator->mutex );
1698116974 /* Happens if the iterator is iterated twice, or closed explicitly */
1698216975 while (iterator->dirp != NULL) {
1698316976 Py_BEGIN_ALLOW_THREADS
@@ -17014,7 +17007,7 @@ ScandirIterator_iternext(PyObject *op)
1701417007
1701517008 /* Loop till we get a non-dot directory or finish iterating */
1701617009 }
17017- SCANDIR_ITERATOR_UNLOCK( iterator);
17010+ FT_MUTEX_UNLOCK(& iterator->mutex );
1701817011
1701917012 if (found) {
1702017013 PyObject *module = PyType_GetModule(Py_TYPE(iterator));
0 commit comments