@@ -379,9 +379,9 @@ static int test_pre_initialization_sys_options(void)
379379
380380
381381/* bpo-20891: Avoid race condition when initialising the GIL */ 
382- static  void  bpo20891_thread (void  * lockp )
382+ static  void  bpo20891_thread (void  * eventp )
383383{
384-     PyThread_type_lock   lock  =  * (( PyThread_type_lock * ) lockp ) ;
384+     PyEvent   * event  =  ( PyEvent   * ) eventp ;
385385
386386    PyGILState_STATE  state  =  PyGILState_Ensure ();
387387    if  (!PyGILState_Check ()) {
@@ -390,8 +390,7 @@ static void bpo20891_thread(void *lockp)
390390    }
391391
392392    PyGILState_Release (state );
393- 
394-     PyThread_release_lock (lock );
393+     _PyEvent_Notify (event );
395394}
396395
397396static  int  test_bpo20891 (void )
@@ -401,27 +400,16 @@ static int test_bpo20891(void)
401400
402401    /* bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not 
403402       crash. */ 
404-     PyThread_type_lock  lock  =  PyThread_allocate_lock ();
405-     if  (!lock ) {
406-         error ("PyThread_allocate_lock failed!" );
407-         return  1 ;
408-     }
409- 
403+     PyEvent  event  =  {0 };
410404    _testembed_initialize ();
411405
412-     unsigned long  thrd  =  PyThread_start_new_thread (bpo20891_thread , & lock );
406+     unsigned long  thrd  =  PyThread_start_new_thread (bpo20891_thread , & event );
413407    if  (thrd  ==  PYTHREAD_INVALID_THREAD_ID ) {
414408        error ("PyThread_start_new_thread failed!" );
415409        return  1 ;
416410    }
417-     PyThread_acquire_lock (lock , WAIT_LOCK );
418411
419-     Py_BEGIN_ALLOW_THREADS 
420-     /* wait until the thread exit */ 
421-     PyThread_acquire_lock (lock , WAIT_LOCK );
422-     Py_END_ALLOW_THREADS 
423- 
424-     PyThread_free_lock (lock );
412+     PyEvent_Wait (& event );
425413
426414    Py_Finalize ();
427415
0 commit comments