summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/siggen.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index edd98fcfc0..02a426864f 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -2,6 +2,7 @@ import hashlib
2import logging 2import logging
3import os 3import os
4import re 4import re
5import tempfile
5import bb.data 6import bb.data
6 7
7logger = logging.getLogger('BitBake.SigGen') 8logger = logging.getLogger('BitBake.SigGen')
@@ -236,10 +237,20 @@ class SignatureGeneratorBasic(SignatureGenerator):
236 if taint: 237 if taint:
237 data['taint'] = taint 238 data['taint'] = taint
238 239
239 with open(sigfile, "wb") as f: 240 fd, tmpfile = tempfile.mkstemp(dir=os.path.dirname(sigfile), prefix="sigtask.")
240 p = pickle.Pickler(f, -1) 241 try:
241 p.dump(data) 242 with os.fdopen(fd, "wb") as stream:
242 os.chmod(sigfile, 0664) 243 p = pickle.dump(data, stream, -1)
244 stream.flush()
245 os.fsync(fd)
246 os.chmod(tmpfile, 0664)
247 os.rename(tmpfile, sigfile)
248 except (OSError, IOError), err:
249 try:
250 os.unlink(tmpfile)
251 except OSError:
252 pass
253 raise err
243 254
244 def dump_sigs(self, dataCache): 255 def dump_sigs(self, dataCache):
245 for fn in self.taskdeps: 256 for fn in self.taskdeps: