summaryrefslogtreecommitdiffstats
path: root/Python/import.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-07-21 05:32:28 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-07-21 05:32:28 (GMT)
commite1fdb32ff2bb1f4b46b56fc1de03f8016bc6c780 (patch)
treecd676947643217e1aaaa4723beecc6313d9d15b6 /Python/import.c
parent1adbb507013bea05cda92ea6aa9a8fef72657923 (diff)
downloadcpython-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.c9
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;