diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-21 05:32:28 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-21 05:32:28 (GMT) |
commit | e1fdb32ff2bb1f4b46b56fc1de03f8016bc6c780 (patch) | |
tree | cd676947643217e1aaaa4723beecc6313d9d15b6 /Python/import.c | |
parent | 1adbb507013bea05cda92ea6aa9a8fef72657923 (diff) | |
download | cpython-e1fdb32ff2bb1f4b46b56fc1de03f8016bc6c780.zip cpython-e1fdb32ff2bb1f4b46b56fc1de03f8016bc6c780.tar.gz cpython-e1fdb32ff2bb1f4b46b56fc1de03f8016bc6c780.tar.bz2 |
Handle allocation failures gracefully. Found with failmalloc.
Many (all?) of these could be backported.
Diffstat (limited to 'Python/import.c')
-rw-r--r-- | Python/import.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Python/import.c b/Python/import.c index 2c0468b..2073c43 100644 --- a/Python/import.c +++ b/Python/import.c @@ -116,6 +116,8 @@ _PyImport_Init(void) for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan) ++countS; filetab = PyMem_NEW(struct filedescr, countD + countS + 1); + if (filetab == NULL) + Py_FatalError("Can't intiialize import file table."); memcpy(filetab, _PyImport_DynLoadFiletab, countD * sizeof(struct filedescr)); memcpy(filetab + countD, _PyImport_StandardFiletab, @@ -239,8 +241,11 @@ lock_import(void) long me = PyThread_get_thread_ident(); if (me == -1) return; /* Too bad */ - if (import_lock == NULL) + if (import_lock == NULL) { import_lock = PyThread_allocate_lock(); + if (import_lock == NULL) + return; /* Nothing much we can do. */ + } if (import_lock_thread == me) { import_lock_level++; return; @@ -259,7 +264,7 @@ static int unlock_import(void) { long me = PyThread_get_thread_ident(); - if (me == -1) + if (me == -1 || import_lock == NULL) return 0; /* Too bad */ if (import_lock_thread != me) return -1; |