diff options
Diffstat (limited to 'bitbake/lib/bb/siggen.py')
| -rw-r--r-- | bitbake/lib/bb/siggen.py | 19 |
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 | |||
| 2 | import logging | 2 | import logging |
| 3 | import os | 3 | import os |
| 4 | import re | 4 | import re |
| 5 | import tempfile | ||
| 5 | import bb.data | 6 | import bb.data |
| 6 | 7 | ||
| 7 | logger = logging.getLogger('BitBake.SigGen') | 8 | logger = 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: |
