3737
3838_NO_WINDOW = getattr (subprocess , "CREATE_NO_WINDOW" , 0 )
3939_patch_lock = threading .Lock ()
40+ _embedded_lock = threading .Lock ()
4041
4142
4243def _check_pgserver ():
@@ -216,16 +217,17 @@ def start_embedded(data_dir):
216217 if fresh :
217218 _clear_stale_data_dir (data_dir )
218219 _preinit_scram (data_dir , pw )
219- try :
220- uri = database .start_embedded (data_dir )
221- except Exception :
222- if not fresh :
223- raise
224- logger .warning ("Fresh PostgreSQL cluster failed to start — clearing and retrying once" )
225- import shutil
226- shutil .rmtree (data_dir , ignore_errors = True )
227- _preinit_scram (data_dir , pw )
228- uri = database .start_embedded (data_dir )
220+ with _embedded_lock :
221+ try :
222+ uri = database .start_embedded (data_dir )
223+ except Exception :
224+ if not fresh :
225+ raise
226+ logger .warning ("Fresh PostgreSQL cluster failed to start — clearing and retrying once" )
227+ import shutil
228+ shutil .rmtree (data_dir , ignore_errors = True )
229+ _preinit_scram (data_dir , pw )
230+ uri = database .start_embedded (data_dir )
229231 if not fresh :
230232 _harden_existing (data_dir , pw , uri )
231233 return _conn_from_uri (uri , pw )
@@ -238,14 +240,16 @@ def ensure_embedded_running(data_dir):
238240 if _check_pgserver ():
239241 _patch_pgserver_pg_ctl ()
240242 import database
241- return _conn_from_uri (database .ensure_embedded_running (data_dir ), pw )
243+ with _embedded_lock :
244+ return _conn_from_uri (database .ensure_embedded_running (data_dir ), pw )
242245 from windows import embedded_pg
243246 return embedded_pg .ensure_running (data_dir , pw )
244247
245248
246249def stop_embedded ():
247- if _check_pgserver ():
248- import database
249- return database .stop_embedded ()
250- from windows import embedded_pg
251- return embedded_pg .stop ()
250+ with _embedded_lock :
251+ if _check_pgserver ():
252+ import database
253+ return database .stop_embedded ()
254+ from windows import embedded_pg
255+ return embedded_pg .stop ()
0 commit comments