BaseTools: Improve the method of checking queue empty
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2807 The Queue.empty() method is not reliable in the multiple process runtime environment. This patch uses a new method to check if all modules are processed and workers need to be stopped. That is to add a None item at the bottom of the queue. Worker check if it gets that None item to know if all the module is processed. Signed-off-by: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Yuwei Chen <yuwei.chen@intel.com> Cc: Lucy Yan <lucyyan@google.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
dcf51c05e8
commit
bfe36cb4ef
@ -1217,7 +1217,7 @@ class Build():
|
||||
mqueue = mp.Queue()
|
||||
for m in AutoGenObject.GetAllModuleInfo:
|
||||
mqueue.put(m)
|
||||
|
||||
mqueue.put((None,None,None,None,None,None,None))
|
||||
AutoGenObject.DataPipe.DataContainer = {"CommandTarget": self.Target}
|
||||
AutoGenObject.DataPipe.DataContainer = {"Workspace_timestamp": AutoGenObject.Workspace._SrcTimeStamp}
|
||||
AutoGenObject.CreateLibModuelDirs()
|
||||
@ -2174,6 +2174,7 @@ class Build():
|
||||
data_pipe_file = os.path.join(Pa.BuildDir, "GlobalVar_%s_%s.bin" % (str(Pa.Guid),Pa.Arch))
|
||||
Pa.DataPipe.dump(data_pipe_file)
|
||||
|
||||
mqueue.put((None,None,None,None,None,None,None))
|
||||
autogen_rt, errorcode = self.StartAutoGen(mqueue, Pa.DataPipe, self.SkipAutoGen, PcdMaList, cqueue)
|
||||
|
||||
if not autogen_rt:
|
||||
|
Reference in New Issue
Block a user