diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 27e6c980f6191555fd6947211c03319b89721309..3fe7a3ba8affb8101c547c86c47f74907bf4f38c 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -198,6 +198,12 @@ void f_get_dir(INT32 args)
 #endif /* HAVE_SOLARIS_READDIR_R */
 		 + 1);
 
+    if(!tmp)
+    {
+      closedir(dir);
+      error("Out of memory.\n");
+    }
+
     while(1)
     {
       int e;
@@ -278,7 +284,6 @@ void f_get_dir(INT32 args)
     closedir(dir);
     THREADS_DISALLOW();
     a=aggregate_array(sp-save_sp);
-    free((char *)dir);
   }
 #else
   dir=opendir(path);