]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add shared data for processes
authorFeng, Bob C <bob.c.feng@intel.com>
Tue, 30 Jul 2019 10:04:14 +0000 (18:04 +0800)
committerFeng, Bob C <bob.c.feng@intel.com>
Fri, 9 Aug 2019 15:15:53 +0000 (23:15 +0800)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1875

Add shared data for autogen processes.

Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/AutoGen/AutoGenWorker.py
BaseTools/Source/Python/build/build.py

index 6c6ef4964741a2d0dcb7c8ad9b7ddd4e16dcf03d..9d06b45ec03f4cb24a5d07bf42292b09ab4583a6 100644 (file)
@@ -64,7 +64,7 @@ class AutoGenManager(threading.Thread):
     def kill(self):\r
         self.feedback_q.put(None)\r
 class AutoGenWorkerInProcess(mp.Process):\r
-    def __init__(self,module_queue,data_pipe_file_path,feedback_q,file_lock,error_event):\r
+    def __init__(self,module_queue,data_pipe_file_path,feedback_q,file_lock, share_data,error_event):\r
         mp.Process.__init__(self)\r
         self.module_queue = module_queue\r
         self.data_pipe_file_path =data_pipe_file_path\r
@@ -72,6 +72,7 @@ class AutoGenWorkerInProcess(mp.Process):
         self.feedback_q = feedback_q\r
         self.PlatformMetaFileSet = {}\r
         self.file_lock = file_lock\r
+        self.share_data = share_data\r
         self.error_event = error_event\r
     def GetPlatformMetaFile(self,filepath,root):\r
         try:\r
index af1be8d281361ff32fd32b6a701cb88f92331bb6..b9305bf7b25a635d04d6b21cc0161d4f7bad2028 100644 (file)
@@ -52,6 +52,7 @@ from PatchPcdValue.PatchPcdValue import PatchBinaryFile
 import Common.GlobalData as GlobalData\r
 from GenFds.GenFds import GenFds, GenFdsApi\r
 import multiprocessing as mp\r
+from multiprocessing import Manager\r
 \r
 # Version and Copyright\r
 VersionNumber = "0.60" + ' ' + gBUILD_VERSION\r
@@ -828,14 +829,15 @@ class Build():
         self.AutoGenMgr = None\r
         EdkLogger.info("")\r
         os.chdir(self.WorkspaceDir)\r
-    def StartAutoGen(self,mqueue, DataPipe,SkipAutoGen,PcdMaList):\r
+        self.share_data = Manager().dict()\r
+    def StartAutoGen(self,mqueue, DataPipe,SkipAutoGen,PcdMaList,share_data):\r
         try:\r
             if SkipAutoGen:\r
                 return True,0\r
             feedback_q = mp.Queue()\r
             file_lock = mp.Lock()\r
             error_event = mp.Event()\r
-            auto_workers = [AutoGenWorkerInProcess(mqueue,DataPipe.dump_file,feedback_q,file_lock,error_event) for _ in range(self.ThreadNumber)]\r
+            auto_workers = [AutoGenWorkerInProcess(mqueue,DataPipe.dump_file,feedback_q,file_lock,share_data,error_event) for _ in range(self.ThreadNumber)]\r
             self.AutoGenMgr = AutoGenManager(auto_workers,feedback_q,error_event)\r
             self.AutoGenMgr.start()\r
             for w in auto_workers:\r
@@ -1230,7 +1232,7 @@ class Build():
             self.Progress.Start("Generating makefile and code")\r
             data_pipe_file = os.path.join(AutoGenObject.BuildDir, "GlobalVar_%s_%s.bin" % (str(AutoGenObject.Guid),AutoGenObject.Arch))\r
             AutoGenObject.DataPipe.dump(data_pipe_file)\r
-            autogen_rt,errorcode = self.StartAutoGen(mqueue, AutoGenObject.DataPipe, self.SkipAutoGen, PcdMaList)\r
+            autogen_rt, errorcode = self.StartAutoGen(mqueue, AutoGenObject.DataPipe, self.SkipAutoGen, PcdMaList,self.share_data)\r
             self.Progress.Stop("done!")\r
             if not autogen_rt:\r
                 self.AutoGenMgr.TerminateWorkers()\r
@@ -2070,7 +2072,7 @@ class Build():
                         mqueue.put(m)\r
                     data_pipe_file = os.path.join(Pa.BuildDir, "GlobalVar_%s_%s.bin" % (str(Pa.Guid),Pa.Arch))\r
                     Pa.DataPipe.dump(data_pipe_file)\r
-                    autogen_rt, errorcode = self.StartAutoGen(mqueue, Pa.DataPipe, self.SkipAutoGen, PcdMaList)\r
+                    autogen_rt, errorcode = self.StartAutoGen(mqueue, Pa.DataPipe, self.SkipAutoGen, PcdMaList,self.share_data)\r
                     self.Progress.Stop("done!")\r
                     self.AutoGenTime += int(round((time.time() - AutoGenStart)))\r
                     if not autogen_rt:\r