Now on revision 113956. ------------------------------------------------------------ revno: 113956 committer: Glenn Morris branch nick: trunk timestamp: Mon 2013-08-19 23:39:17 -0700 message: Remove stray execute bit diff: === modified file 'test/automated/package-test.el' (properties changed: +x to -x) === modified file 'test/automated/package-x-test.el' (properties changed: +x to -x) ------------------------------------------------------------ revno: 113955 committer: Glenn Morris branch nick: trunk timestamp: Mon 2013-08-19 23:36:10 -0700 message: * Makefile.in (distclean, bootstrap-clean, maintainer-clean): Clean test/automated if present. diff: === modified file 'ChangeLog' --- ChangeLog 2013-08-19 05:23:05 +0000 +++ ChangeLog 2013-08-20 06:36:10 +0000 @@ -1,3 +1,8 @@ +2013-08-20 Glenn Morris + + * Makefile.in (distclean, bootstrap-clean, maintainer-clean): + Clean test/automated if present. + 2013-08-19 Paul Eggert Merge from gnulib, incorporating: === modified file 'Makefile.in' --- Makefile.in 2013-08-15 06:31:14 +0000 +++ Makefile.in 2013-08-20 06:36:10 +0000 @@ -859,6 +859,8 @@ (cd leim; $(MAKE) $(MFLAGS) distclean) (cd lisp; $(MAKE) $(MFLAGS) distclean) (cd nextstep && $(MAKE) $(MFLAGS) distclean) + [ ! -d test/automated ] || \ + cd test/automated && $(MAKE) $(MFLAGS) distclean ${top_distclean} ### `bootstrap-clean' @@ -878,6 +880,8 @@ (cd leim; $(MAKE) $(MFLAGS) maintainer-clean) (cd lisp; $(MAKE) $(MFLAGS) bootstrap-clean) (cd nextstep && $(MAKE) $(MFLAGS) maintainer-clean) + [ ! -d test/automated ] || \ + cd test/automated && $(MAKE) $(MFLAGS) bootstrap-clean [ ! -f config.log ] || mv -f config.log config.log~ ${top_bootclean} @@ -898,6 +902,8 @@ maintainer-clean: bootstrap-clean FRC (cd src; $(MAKE) $(MFLAGS) maintainer-clean) (cd lisp; $(MAKE) $(MFLAGS) maintainer-clean) + [ ! -d test/automated ] || \ + cd test/automated && $(MAKE) $(MFLAGS) maintainer-clean ${top_maintainer_clean} ### This doesn't actually appear in the coding standards, but Karl ------------------------------------------------------------ revno: 113954 committer: Paul Eggert branch nick: trunk timestamp: Mon 2013-08-19 17:51:35 -0700 message: * image.c (SIGNATURE_DIGESTSIZE): Remove. (struct animation_cache): Make signature a flexible array member. All uses changed. This is a tad slower but may insulate us better from future changes to ImageMagick. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 20:47:27 +0000 +++ src/ChangeLog 2013-08-20 00:51:35 +0000 @@ -1,3 +1,10 @@ +2013-08-20 Paul Eggert + + * image.c (SIGNATURE_DIGESTSIZE): Remove. + (struct animation_cache): Make signature a flexible array member. + All uses changed. This is a tad slower but may insulate us better + from future changes to ImageMagick. + 2013-08-19 Paul Eggert * image.c: Shrink memory needed for animation cache. === modified file 'src/image.c' --- src/image.c 2013-08-19 20:47:27 +0000 +++ src/image.c 2013-08-20 00:51:35 +0000 @@ -7876,17 +7876,13 @@ separate from the image cache, because the images may be scaled before display. */ -/* Size of ImageMagick image signatures, in bytes. It's SHA-256 as a - hex string, so it's 256 bits represented via 4 bits per byte. */ -enum { SIGNATURE_DIGESTSIZE = 256 / 4 }; - struct animation_cache { MagickWand *wand; int index; EMACS_TIME update_time; struct animation_cache *next; - char signature[SIGNATURE_DIGESTSIZE]; + char signature[FLEXIBLE_ARRAY_MEMBER]; }; static struct animation_cache *animation_cache = NULL; @@ -7894,11 +7890,13 @@ static struct animation_cache * imagemagick_create_cache (char *signature) { - struct animation_cache *cache = xmalloc (sizeof *cache); + struct animation_cache *cache + = xmalloc (offsetof (struct animation_cache, signature) + + strlen (signature) + 1); cache->wand = 0; cache->index = 0; cache->next = 0; - memcpy (cache->signature, signature, SIGNATURE_DIGESTSIZE); + strcpy (cache->signature, signature); return cache; } @@ -7932,7 +7930,6 @@ struct animation_cache *cache; struct animation_cache **pcache = &animation_cache; - eassert (strlen (signature) == SIGNATURE_DIGESTSIZE); imagemagick_prune_animation_cache (); while (1) @@ -7943,7 +7940,7 @@ *pcache = cache = imagemagick_create_cache (signature); break; } - if (memcmp (signature, cache->signature, SIGNATURE_DIGESTSIZE) == 0) + if (strcmp (signature, cache->signature) == 0) break; pcache = &cache->next; } ------------------------------------------------------------ revno: 113953 committer: Paul Eggert branch nick: trunk timestamp: Mon 2013-08-19 13:47:27 -0700 message: * image.c: Shrink memory needed for animation cache. (SIGNATURE_DIGESTSIZE): New constant. (struct animation_cache): Make 'signature' a fixed size array of bytes. (imagemagick_create_cache): Copy the signature. This saves several KB of memory that ImageMagick wastes per signature. Don't bother updating the update_time, as the caller does that now. (imagemagick_prune_animation_cache): Don't destroy the signature, as it's a fixed size struct member now. (imagemagick_get_animation_cache): Always destroy the signature, as it's now imagemagick_create_cache's responsibility to copy it. Avoid duplicate calls to strcmp and to imagemagick_create_cache, and use memcmp rather than strcmp. eassert that ImageMagick returns a signature of the specified length. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 17:56:58 +0000 +++ src/ChangeLog 2013-08-19 20:47:27 +0000 @@ -1,3 +1,19 @@ +2013-08-19 Paul Eggert + + * image.c: Shrink memory needed for animation cache. + (SIGNATURE_DIGESTSIZE): New constant. + (struct animation_cache): Make 'signature' a fixed size array of bytes. + (imagemagick_create_cache): Copy the signature. This saves + several KB of memory that ImageMagick wastes per signature. + Don't bother updating the update_time, as the caller does that now. + (imagemagick_prune_animation_cache): Don't destroy the signature, as + it's a fixed size struct member now. + (imagemagick_get_animation_cache): Always destroy the signature, + as it's now imagemagick_create_cache's responsibility to copy it. + Avoid duplicate calls to strcmp and to imagemagick_create_cache, + and use memcmp rather than strcmp. + eassert that ImageMagick returns a signature of the specified length. + 2013-08-19 Lars Magne Ingebrigtsen * image.c (imagemagick_get_animation_cache): Don't segfault on === modified file 'src/image.c' --- src/image.c 2013-08-19 17:56:58 +0000 +++ src/image.c 2013-08-19 20:47:27 +0000 @@ -7876,13 +7876,17 @@ separate from the image cache, because the images may be scaled before display. */ +/* Size of ImageMagick image signatures, in bytes. It's SHA-256 as a + hex string, so it's 256 bits represented via 4 bits per byte. */ +enum { SIGNATURE_DIGESTSIZE = 256 / 4 }; + struct animation_cache { - char *signature; MagickWand *wand; int index; EMACS_TIME update_time; struct animation_cache *next; + char signature[SIGNATURE_DIGESTSIZE]; }; static struct animation_cache *animation_cache = NULL; @@ -7891,11 +7895,10 @@ imagemagick_create_cache (char *signature) { struct animation_cache *cache = xmalloc (sizeof *cache); - cache->signature = signature; cache->wand = 0; cache->index = 0; cache->next = 0; - cache->update_time = current_emacs_time (); + memcpy (cache->signature, signature, SIGNATURE_DIGESTSIZE); return cache; } @@ -7914,7 +7917,6 @@ pcache = &cache->next; else { - DestroyString (cache->signature); if (cache->wand) DestroyMagickWand (cache->wand); *pcache = cache->next; @@ -7928,24 +7930,22 @@ { char *signature = MagickGetImageSignature (wand); struct animation_cache *cache; + struct animation_cache **pcache = &animation_cache; + eassert (strlen (signature) == SIGNATURE_DIGESTSIZE); imagemagick_prune_animation_cache (); - cache = animation_cache; - - if (! cache) - { - animation_cache = imagemagick_create_cache (signature); - return animation_cache; - } - - while (strcmp (signature, cache->signature) && - cache->next) - cache = cache->next; - - if (strcmp (signature, cache->signature)) - { - cache->next = imagemagick_create_cache (signature); - return cache->next; + + while (1) + { + cache = *pcache; + if (! cache) + { + *pcache = cache = imagemagick_create_cache (signature); + break; + } + if (memcmp (signature, cache->signature, SIGNATURE_DIGESTSIZE) == 0) + break; + pcache = &cache->next; } DestroyString (signature); ------------------------------------------------------------ revno: 113952 committer: Lars Magne Ingebrigtsen branch nick: trunk timestamp: Mon 2013-08-19 19:56:58 +0200 message: (imagemagick_get_animation_cache): Fix memory leak. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 14:52:52 +0000 +++ src/ChangeLog 2013-08-19 17:56:58 +0000 @@ -2,6 +2,9 @@ * image.c (imagemagick_get_animation_cache): Don't segfault on each invocation. + (imagemagick_get_animation_cache): Revert to previous definition + so that it actually works. But keep the memory leak fix. + (imagemagick_get_animation_cache): Fix memory leak. 2013-08-19 Paul Eggert === modified file 'src/image.c' --- src/image.c 2013-08-19 16:24:06 +0000 +++ src/image.c 2013-08-19 17:56:58 +0000 @@ -7945,10 +7945,10 @@ if (strcmp (signature, cache->signature)) { cache->next = imagemagick_create_cache (signature); - DestroyString (signature); return cache->next; } + DestroyString (signature); cache->update_time = current_emacs_time (); return cache; } ------------------------------------------------------------ revno: 113951 committer: Paul Eggert branch nick: trunk timestamp: Mon 2013-08-19 09:24:06 -0700 message: * image.c: Space before paren. diff: === modified file 'src/image.c' --- src/image.c 2013-08-19 15:14:42 +0000 +++ src/image.c 2013-08-19 16:24:06 +0000 @@ -7938,11 +7938,11 @@ return animation_cache; } - while (strcmp(signature, cache->signature) && + while (strcmp (signature, cache->signature) && cache->next) cache = cache->next; - if (strcmp(signature, cache->signature)) + if (strcmp (signature, cache->signature)) { cache->next = imagemagick_create_cache (signature); DestroyString (signature); ------------------------------------------------------------ revno: 113950 committer: Lars Magne Ingebrigtsen branch nick: trunk timestamp: Mon 2013-08-19 17:14:42 +0200 message: Fix previous commit. (imagemagick_get_animation_cache): Revert to previous definition so that it actually works. But keep the memory leak fix. diff: === modified file 'src/image.c' --- src/image.c 2013-08-19 14:52:52 +0000 +++ src/image.c 2013-08-19 15:14:42 +0000 @@ -7895,6 +7895,7 @@ cache->wand = 0; cache->index = 0; cache->next = 0; + cache->update_time = current_emacs_time (); return cache; } @@ -7927,28 +7928,25 @@ { char *signature = MagickGetImageSignature (wand); struct animation_cache *cache; - struct animation_cache **pcache; imagemagick_prune_animation_cache (); - - if (! animation_cache) - animation_cache = cache = imagemagick_create_cache (signature); - else - { - for (pcache = &animation_cache; *pcache; pcache = &cache->next) - { - cache = *pcache; - if (! cache) - { - animation_cache = cache = imagemagick_create_cache (signature); - break; - } - if (strcmp (signature, cache->signature) == 0) - { - DestroyString (signature); - break; - } - } + cache = animation_cache; + + if (! cache) + { + animation_cache = imagemagick_create_cache (signature); + return animation_cache; + } + + while (strcmp(signature, cache->signature) && + cache->next) + cache = cache->next; + + if (strcmp(signature, cache->signature)) + { + cache->next = imagemagick_create_cache (signature); + DestroyString (signature); + return cache->next; } cache->update_time = current_emacs_time (); ------------------------------------------------------------ revno: 113949 committer: Lars Magne Ingebrigtsen branch nick: trunk timestamp: Mon 2013-08-19 16:52:52 +0200 message: * image.c (imagemagick_get_animation_cache): Don't segfault on each invocation. Bug introduced by revno 113947, which obviously hadn't even been tested once. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 07:01:37 +0000 +++ src/ChangeLog 2013-08-19 14:52:52 +0000 @@ -1,3 +1,8 @@ +2013-08-19 Lars Magne Ingebrigtsen + + * image.c (imagemagick_get_animation_cache): Don't segfault on + each invocation. + 2013-08-19 Paul Eggert * image.c: Fix animation cache signature memory leak. === modified file 'src/image.c' --- src/image.c 2013-08-19 07:01:37 +0000 +++ src/image.c 2013-08-19 14:52:52 +0000 @@ -7927,23 +7927,27 @@ { char *signature = MagickGetImageSignature (wand); struct animation_cache *cache; - struct animation_cache **pcache = &animation_cache; + struct animation_cache **pcache; imagemagick_prune_animation_cache (); - cache = animation_cache; - for (pcache = &animation_cache; *pcache; pcache = &cache->next) + if (! animation_cache) + animation_cache = cache = imagemagick_create_cache (signature); + else { - cache = *pcache; - if (! cache) - { - *pcache = cache = imagemagick_create_cache (signature); - break; - } - if (strcmp (signature, cache->signature) == 0) - { - DestroyString (signature); - break; + for (pcache = &animation_cache; *pcache; pcache = &cache->next) + { + cache = *pcache; + if (! cache) + { + animation_cache = cache = imagemagick_create_cache (signature); + break; + } + if (strcmp (signature, cache->signature) == 0) + { + DestroyString (signature); + break; + } } } ------------------------------------------------------------ revno: 113948 committer: Glenn Morris branch nick: trunk timestamp: Mon 2013-08-19 06:17:37 -0400 message: Auto-commit of generated files. diff: === modified file 'autogen/configure' --- autogen/configure 2013-08-16 10:17:35 +0000 +++ autogen/configure 2013-08-19 10:17:37 +0000 @@ -7920,6 +7920,10 @@ for w in $ws; do as_gl_Warn=`$as_echo "gl_cv_warn_c_$w" | $as_tr_sh` +gl_positive="$w" +case $gl_positive in + -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; +esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $w" >&5 $as_echo_n "checking whether C compiler handles $w... " >&6; } if { as_var=$as_gl_Warn; eval "test \"\${$as_var+set}\" = set"; }; then : @@ -7927,7 +7931,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $w" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7966,7 +7970,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-missing-field-initializers" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmissing-field-initializers" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8002,7 +8006,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-sign-compare" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wsign-compare" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8038,7 +8042,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-type-limits" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wtype-limits" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8074,7 +8078,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-switch" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wswitch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8110,7 +8114,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-unused-parameter" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-parameter" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8146,7 +8150,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-format-nonliteral" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wformat-nonliteral" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8185,7 +8189,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-logical-op" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wlogical-op" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8224,7 +8228,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-format-extra-args" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wformat-extra-args" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8260,7 +8264,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-tautological-constant-out-of-range-compare" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wtautological-constant-out-of-range-compare" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8296,7 +8300,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-unused-command-line-argument" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-command-line-argument" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8332,7 +8336,7 @@ else gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wno-unused-value" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-value" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ ------------------------------------------------------------ revno: 113947 author: Paul Eggert committer: Paul Eggert branch nick: trunk timestamp: Mon 2013-08-19 00:01:37 -0700 message: * image.c: Fix animation cache signature memory leak. Fix some other minor performance problems while we're at it. (imagemagick_create_cache): Clear just the members that need clearing. Don't set update_time, as caller does that now. (imagemagick_prune_animation_cache, imagemagick_get_animation_cache): Simplify by using pointer-to-pointer instead of a prev pointer. (imagemagick_prune_animation_cache): Use make_emacs_time rather than EMACS_TIME_FROM_DOUBLE, and DestroyString rather than free. (imagemagick_get_animation_cache): Don't xstrdup the image signature; it's already a copy. Free the signature probe unless it's cached. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 05:46:17 +0000 +++ src/ChangeLog 2013-08-19 07:01:37 +0000 @@ -1,5 +1,16 @@ 2013-08-19 Paul Eggert + * image.c: Fix animation cache signature memory leak. + Fix some other minor performance problems while we're at it. + (imagemagick_create_cache): Clear just the members that + need clearing. Don't set update_time, as caller does that now. + (imagemagick_prune_animation_cache, imagemagick_get_animation_cache): + Simplify by using pointer-to-pointer instead of a prev pointer. + (imagemagick_prune_animation_cache): Use make_emacs_time rather + than EMACS_TIME_FROM_DOUBLE, and DestroyString rather than free. + (imagemagick_get_animation_cache): Don't xstrdup the image signature; + it's already a copy. Free the signature probe unless it's cached. + * process.c (handle_child_signal): Fix crash; deleted pid (Bug#15106). This was introduced by my 2013-08-12 fix for Bug#15035. === modified file 'src/image.c' --- src/image.c 2013-08-19 04:24:19 +0000 +++ src/image.c 2013-08-19 07:01:37 +0000 @@ -7890,9 +7890,11 @@ static struct animation_cache * imagemagick_create_cache (char *signature) { - struct animation_cache *cache = xzalloc (sizeof *cache); + struct animation_cache *cache = xmalloc (sizeof *cache); cache->signature = signature; - cache->update_time = current_emacs_time (); + cache->wand = 0; + cache->index = 0; + cache->next = 0; return cache; } @@ -7900,30 +7902,22 @@ static void imagemagick_prune_animation_cache (void) { - struct animation_cache *cache = animation_cache; - struct animation_cache *prev = NULL; + struct animation_cache **pcache = &animation_cache; EMACS_TIME old = sub_emacs_time (current_emacs_time (), - EMACS_TIME_FROM_DOUBLE (60)); + make_emacs_time (60, 0)); - while (cache) + while (*pcache) { - if (EMACS_TIME_LT (cache->update_time, old)) + struct animation_cache *cache = *pcache; + if (EMACS_TIME_LE (old, cache->update_time)) + pcache = &cache->next; + else { - struct animation_cache *this_cache = cache; - free (cache->signature); + DestroyString (cache->signature); if (cache->wand) DestroyMagickWand (cache->wand); - if (prev) - prev->next = cache->next; - else - animation_cache = cache->next; - cache = cache->next; - free (this_cache); - } - else - { - prev = cache; - cache = cache->next; + *pcache = cache->next; + xfree (cache); } } } @@ -7931,26 +7925,26 @@ static struct animation_cache * imagemagick_get_animation_cache (MagickWand *wand) { - char *signature = xstrdup (MagickGetImageSignature (wand)); + char *signature = MagickGetImageSignature (wand); struct animation_cache *cache; + struct animation_cache **pcache = &animation_cache; imagemagick_prune_animation_cache (); cache = animation_cache; - if (! cache) - { - animation_cache = imagemagick_create_cache (signature); - return animation_cache; - } - - while (strcmp(signature, cache->signature) && - cache->next) - cache = cache->next; - - if (strcmp(signature, cache->signature)) - { - cache->next = imagemagick_create_cache (signature); - return cache->next; + for (pcache = &animation_cache; *pcache; pcache = &cache->next) + { + cache = *pcache; + if (! cache) + { + *pcache = cache = imagemagick_create_cache (signature); + break; + } + if (strcmp (signature, cache->signature) == 0) + { + DestroyString (signature); + break; + } } cache->update_time = current_emacs_time (); ------------------------------------------------------------ revno: 113946 fixes bug: http://debbugs.gnu.org/15106 committer: Paul Eggert branch nick: trunk timestamp: Sun 2013-08-18 22:46:17 -0700 message: * process.c (handle_child_signal): Fix crash; deleted pid. This was introduced by my 2013-08-12 fix for Bug#15035. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2013-08-19 04:24:19 +0000 +++ src/ChangeLog 2013-08-19 05:46:17 +0000 @@ -1,3 +1,8 @@ +2013-08-19 Paul Eggert + + * process.c (handle_child_signal): Fix crash; deleted pid (Bug#15106). + This was introduced by my 2013-08-12 fix for Bug#15035. + 2013-08-19 Dmitry Antipov * image.c (imagemagick_create_cache, imagemagick_get_animation_cache) === modified file 'src/process.c' --- src/process.c 2013-08-16 05:15:51 +0000 +++ src/process.c 2013-08-19 05:46:17 +0000 @@ -6153,7 +6153,10 @@ = (MOST_NEGATIVE_FIXNUM <= TYPE_MINIMUM (pid_t) && TYPE_MAXIMUM (pid_t) <= MOST_POSITIVE_FIXNUM); Lisp_Object head = XCAR (tail); - Lisp_Object xpid = XCAR (head); + Lisp_Object xpid; + if (! CONSP (head)) + continue; + xpid = XCAR (head); if (all_pids_are_fixnums ? INTEGERP (xpid) : NUMBERP (xpid)) { pid_t deleted_pid;