emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Build segfaults when loading image.el


From: Dhruva Krishnamurthy
Subject: Re: Build segfaults when loading image.el
Date: Mon, 23 Dec 2019 14:43:55 -0800

Missed providing other details:

# Build host env
$ uname -a
Darwin C02V341YHTD8 19.2.0 Darwin Kernel Version 19.2.0: Sat Nov  9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64 x86_64 i386 MacBookPro14,3 Darwin

# Configure options
$ configure CC=clang --with-imagemagick

# ImageMagic details
$ MagickWand-config --cflags --ldflags
-Xpreprocessor -fopenmp -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -Xpreprocessor -fopenmp -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/local/Cellar/imagemagick/7.0.9-10/include/ImageMagick-7
-L/usr/local/Cellar/imagemagick/7.0.9-10/lib -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI


On Mon, Dec 23, 2019 at 1:59 PM Dhruva Krishnamurthy <address@hidden> wrote:
Loading image.el segfaults when ImageMagick is enabled on MacOS (do not have access to other platforms) since image magic environment is not initialized yet. The following patch on HEAD fixes the crash by initializing it before use.

-dhruva

diff --git a/src/image.c b/src/image.c
index 70d932f9ed..50d90ccb55 100644
--- a/src/image.c
+++ b/src/image.c
@@ -8603,6 +8603,20 @@ #define DrawRectangle DrawRectangleGif
     MagickPixelPacket *);
 #endif
 
+/* Initialize the ImageMagick environment if not initialized.  */
+
+static void
+imagemagick_initialize(void)
+{
+  /* Initialize the ImageMagick environment.  */
+  static bool imagemagick_initialized;
+  if (!imagemagick_initialized)
+    {
+      MagickWandGenesis();
+      imagemagick_initialized = !!IsMagickWandInstantiated();
+    }
+}
+
 /* Log ImageMagick error message.
    Useful when an ImageMagick function returns the status `MagickFalse'.  */
 
@@ -8876,12 +8890,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
   char *filename_hint = NULL;
 
   /* Initialize the ImageMagick environment.  */
-  static bool imagemagick_initialized;
-  if (!imagemagick_initialized)
-    {
-      imagemagick_initialized = true;
-      MagickWandGenesis ();
-    }
+  imagemagick_initialize();
 
   /* Handle image index for image types who can contain more than one image.
      Interface :index is same as for GIF.  First we "ping" the image to see how
@@ -9290,6 +9299,9 @@ DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0,
   char **imtypes;
   size_t i;
 
+  /* Initialize the ImageMagick environment.  */
+  imagemagick_initialize();
+
   ex = AcquireExceptionInfo ();
   imtypes = GetMagickList ("*", &numf, ex);
   DestroyExceptionInfo (ex);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]