summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/codeparser.py14
-rw-r--r--bitbake/lib/bb/cooker.py5
2 files changed, 15 insertions, 4 deletions
diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py
index 84d1c09f21..fdba06f678 100644
--- a/bitbake/lib/bb/codeparser.py
+++ b/bitbake/lib/bb/codeparser.py
@@ -70,8 +70,22 @@ def parser_cache_save(d):
70 if not cachefile: 70 if not cachefile:
71 return 71 return
72 72
73 lf = bb.utils.lockfile(cachefile + ".lock")
74
75 p = pickle.Unpickler(file(cachefile, "rb"))
76 data, version = p.load()
77
78 if version == PARSERCACHE_VERSION:
79 for h in data[0]:
80 if h not in pythonparsecache:
81 pythonparsecache[h] = data[0][h]
82 for h in data[1]:
83 if h not in pythonparsecache:
84 shellparsecache[h] = data[1][h]
85
73 p = pickle.Pickler(file(cachefile, "wb"), -1) 86 p = pickle.Pickler(file(cachefile, "wb"), -1)
74 p.dump([[pythonparsecache, shellparsecache], PARSERCACHE_VERSION]) 87 p.dump([[pythonparsecache, shellparsecache], PARSERCACHE_VERSION])
88 bb.utils.unlockfile(lf)
75 89
76class PythonParser(): 90class PythonParser():
77 class ValueVisitor(): 91 class ValueVisitor():
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 3c7b60eb95..98612656ab 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1112,6 +1112,7 @@ class CookerParser(object):
1112 def start(self): 1112 def start(self):
1113 def init(cfg): 1113 def init(cfg):
1114 signal.signal(signal.SIGINT, signal.SIG_IGN) 1114 signal.signal(signal.SIGINT, signal.SIG_IGN)
1115 multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1)
1115 parse_file.cfg = cfg 1116 parse_file.cfg = cfg
1116 1117
1117 bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata) 1118 bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata)
@@ -1137,10 +1138,6 @@ class CookerParser(object):
1137 sync.start() 1138 sync.start()
1138 atexit.register(lambda: sync.join()) 1139 atexit.register(lambda: sync.join())
1139 1140
1140 codesync = threading.Thread(target=bb.codeparser.parser_cache_save(self.cooker.configuration.data))
1141 codesync.start()
1142 atexit.register(lambda: codesync.join())
1143
1144 def load_cached(self): 1141 def load_cached(self):
1145 for filename, appends in self.fromcache: 1142 for filename, appends in self.fromcache:
1146 cached, infos = self.bb_cache.load(filename, appends, self.cfgdata) 1143 cached, infos = self.bb_cache.load(filename, appends, self.cfgdata)