https://github.com/ImageMagick/ImageMagick/issues/790
diff --git a/MagickCore/memory-private.h b/MagickCore/memory-private.h
index 0390cbe..bea3d6d 100644
--- a/MagickCore/memory-private.h
+++ b/MagickCore/memory-private.h
@@ -22,6 +22,7 @@
 extern "C" {
 #endif
 
+#include "MagickCore/exception.h"
 
 #if defined(__powerpc__)
 #  define CACHE_LINE_SIZE  128
@@ -45,6 +46,20 @@
 MagickExport MagickBooleanType 
   HeapOverflowSanityCheck(const size_t,const size_t) magick_alloc_sizes(1,2);
 
+static inline void *AcquireCriticalMemory(const size_t size)
+{
+  register void
+    *memory;
+ 
+  /*
+    Fail if memory request cannot be fulfilled.
+  */
+  memory=AcquireMagickMemory(size);
+  if (memory == (void *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  return(memory);
+}
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif
diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index bee3a43..bf27dea 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -61,6 +61,7 @@
 #include "MagickCore/layer.h"
 #include "MagickCore/mime-private.h"
 #include "MagickCore/memory_.h"
+#include "MagickCore/memory-private.h"
 #include "MagickCore/monitor.h"
 #include "MagickCore/montage.h"
 #include "MagickCore/morphology.h"
@@ -323,7 +324,7 @@
 
               if (status != MagickFalse)
                 {
-                  temp=(char*) AcquireMagickMemory(strlen(path)+1);
+                  temp=(char*) AcquireCriticalMemory(strlen(path)+1);
                   CopyMagickString(temp,path,strlen(path)+1);
                 }
               home=DestroyString(home);
@@ -3234,4 +3235,4 @@
   magick_unreferenced(device);
   magick_unreferenced(value);
 }
-#endif
\ No newline at end of file
+#endif
diff --git a/MagickCore/registry.c b/MagickCore/registry.c
index 4cc6760..2e159f7 100644
--- a/MagickCore/registry.c
+++ b/MagickCore/registry.c
@@ -46,6 +46,7 @@
 #include "MagickCore/image.h"
 #include "MagickCore/list.h"
 #include "MagickCore/memory_.h"
+#include "MagickCore/memory-private.h"
 #include "MagickCore/registry.h"
 #include "MagickCore/registry-private.h"
 #include "MagickCore/splay-tree.h"
@@ -514,9 +515,7 @@
   }
   if (clone_value == (void *) NULL)
     return(MagickFalse);
-  registry_info=(RegistryInfo *) AcquireMagickMemory(sizeof(*registry_info));
-  if (registry_info == (RegistryInfo *) NULL)
-    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  registry_info=(RegistryInfo *) AcquireCriticalMemory(sizeof(*registry_info));
   (void) ResetMagickMemory(registry_info,0,sizeof(*registry_info));
   registry_info->type=type;
   registry_info->value=clone_value;