unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Pip Cet <pipcet@gmail.com>
To: Pieter van Oostrum <pieter-l@vanoostrum.org>
Cc: eggert@cs.ucla.edu, 39962@debbugs.gnu.org
Subject: bug#39962: 27.0.90; Crash in Emacs 27.0.90
Date: Sun, 22 Mar 2020 15:48:42 +0000	[thread overview]
Message-ID: <CAOqdjBcx2ZvPgMW5Vber1tWctfeD8sY6TH6Sa0+NRp74GyHnPw@mail.gmail.com> (raw)
In-Reply-To: <lxy2rt7693.fsf@cochabamba.vanoostrum.org>

[-- Attachment #1: Type: text/plain, Size: 1042 bytes --]

On Sat, Mar 21, 2020 at 9:22 PM Pieter van Oostrum
<pieter-l@vanoostrum.org> wrote:
> Pip Cet <pipcet@gmail.com> writes:
> > On Thu, Mar 19, 2020 at 1:23 PM Pieter van Oostrum
> > <pieter-l@vanoostrum.org> wrote:
> > If you have the time, could you install the patch, start Emacs the
> > same way you did to produce your original crash, and do similar things
> > you did that time? If we're lucky, we'll be getting an assert failure
> > rather than mere corruption.
> >
> With that patch (the latest 0001-more-debugging.patch) Emacs gets extremely slow (about 10 times slower that normal). Also, while it is processing, it becomes completely unresponsive: the cursor becomes an spinning beach ball, it won't even resize the windows, or react to C-g.

That's okay, that's the extra delays to increase the race condition.
I've reduced them by an order of magnitude in this patch.

I've also added more checks for what's one potential erroneous code
path: corruption of the red-black tree we use in conservative stack
marking.

[-- Attachment #2: 0001-even-more-debugging.patch --]
[-- Type: text/x-patch, Size: 4742 bytes --]

From 487c503bbd20ac87111ca3718f9f43405cab488e Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@gmail.com>
Date: Sun, 22 Mar 2020 14:58:07 +0000
Subject: [PATCH] even more debugging

---
 src/alloc.c | 46 ++++++++++++++++++++++++++++++++++++++++------
 src/lisp.h  |  2 +-
 2 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index 1c6b664b22..e33fca8c7f 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -234,7 +234,7 @@ #define GC_DEFAULT_THRESHOLD (100000 * word_size)
 
 /* True during GC.  */
 
-bool gc_in_progress;
+volatile bool gc_in_progress;
 
 /* System byte and object counts reported by GC.  */
 
@@ -711,6 +711,8 @@ xmalloc (size_t size)
   if (!val && size)
     memory_full (size);
   MALLOC_PROBE (size);
+  if (val)
+    memset (val, 0xaa, size);
   return val;
 }
 
@@ -970,7 +972,12 @@ lisp_malloc (size_t nbytes, enum mem_type type)
 
 #ifndef GC_MALLOC_CHECK
   if (val && type != MEM_TYPE_NON_LISP)
-    mem_insert (val, (char *) val + nbytes, type);
+    {
+      eassert (!gc_in_progress);
+      gc_in_progress = true;
+      mem_insert (val, (char *) val + nbytes, type);
+      gc_in_progress = false;
+    }
 #endif
 
   MALLOC_UNBLOCK_INPUT;
@@ -1206,7 +1213,12 @@ lisp_align_malloc (size_t nbytes, enum mem_type type)
 
 #ifndef GC_MALLOC_CHECK
   if (type != MEM_TYPE_NON_LISP)
-    mem_insert (val, (char *) val + nbytes, type);
+    {
+      eassert (!gc_in_progress);
+      gc_in_progress = true;
+      mem_insert (val, (char *) val + nbytes, type);
+      gc_in_progress = false;
+    }
 #endif
 
   MALLOC_UNBLOCK_INPUT;
@@ -1301,7 +1313,10 @@ lmalloc (size_t size)
     {
       void *p = malloc (size);
       if (laligned (p, size))
-	return p;
+	{
+	  memset (p, 0x5a, size);
+	  return p;
+	}
       free (p);
       size_t bigger = size + LISP_ALIGNMENT;
       if (size < bigger)
@@ -2842,6 +2857,7 @@ setup_on_free_list (struct Lisp_Vector *v, ptrdiff_t nbytes)
   eassume (header_size <= nbytes);
   ptrdiff_t nwords = (nbytes - header_size) / word_size;
   XSETPVECTYPESIZE (v, PVEC_FREE, 0, nwords);
+  memset (v->contents, 0xa5, nbytes - header_size);
   eassert (nbytes % roundup_size == 0);
   ptrdiff_t vindex = VINDEX (nbytes);
   eassert (vindex < VECTOR_MAX_FREE_LIST_INDEX);
@@ -2857,8 +2873,13 @@ allocate_vector_block (void)
   struct vector_block *block = xmalloc (sizeof *block);
 
 #ifndef GC_MALLOC_CHECK
-  mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
-	      MEM_TYPE_VECTOR_BLOCK);
+  {
+    eassert (!gc_in_progress);
+    gc_in_progress = true;
+    mem_insert (block->data, block->data + VECTOR_BLOCK_BYTES,
+		MEM_TYPE_VECTOR_BLOCK);
+    gc_in_progress = false;
+  }
 #endif
 
   block->next = vector_blocks;
@@ -3094,6 +3115,7 @@ sweep_vectors (void)
 #ifndef GC_MALLOC_CHECK
 	  mem_delete (mem_find (block->data));
 #endif
+	  memset (block, 0x55, VECTOR_BLOCK_BYTES);
 	  xfree (block);
 	}
       else
@@ -3139,6 +3161,10 @@ #define VECTOR_ELTS_MAX \
 static struct Lisp_Vector *
 allocate_vectorlike (ptrdiff_t len)
 {
+  eassert (!gc_in_progress);
+  gc_in_progress = true;
+  struct timespec ts = make_timespec (0, 100000);
+  nanosleep (&ts, NULL);
   eassert (0 < len && len <= VECTOR_ELTS_MAX);
   ptrdiff_t nbytes = header_size + len * word_size;
   struct Lisp_Vector *p;
@@ -3174,6 +3200,7 @@ allocate_vectorlike (ptrdiff_t len)
 
   MALLOC_UNBLOCK_INPUT;
 
+  gc_in_progress = false;
   return ptr_bounds_clip (p, nbytes);
 }
 
@@ -4001,6 +4028,9 @@ mem_insert (void *start, void *end, enum mem_type type)
   x->end = end;
   x->type = type;
   x->parent = parent;
+  if (parent && (parent->end >= start ||
+		 parent->start <= end))
+    eassert (0);
   x->left = x->right = MEM_NIL;
   x->color = MEM_RED;
 
@@ -5868,6 +5898,8 @@ garbage_collect (void)
   if (garbage_collection_inhibited)
     return;
 
+  eassert (!gc_in_progress);
+
   /* Record this function, so it appears on the profiler's backtraces.  */
   record_in_backtrace (QAutomatic_GC, 0, 0);
 
@@ -5934,6 +5966,8 @@ garbage_collect (void)
   shrink_regexp_cache ();
 
   gc_in_progress = 1;
+  struct timespec ts = make_timespec (0, 100000);
+  nanosleep (&ts, NULL);
 
   /* Mark all the special slots that serve as the roots of accessibility.  */
 
diff --git a/src/lisp.h b/src/lisp.h
index 8674fe11a6..4c94085170 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4006,7 +4006,7 @@ #define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag)		       \
 				   PSEUDOVECSIZE (type, field),	       \
 				   VECSIZE (type), tag))
 
-extern bool gc_in_progress;
+extern volatile bool gc_in_progress;
 extern Lisp_Object make_float (double);
 extern void display_malloc_warning (void);
 extern ptrdiff_t inhibit_garbage_collection (void);
-- 
2.25.1


  parent reply	other threads:[~2020-03-22 15:48 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-06 23:55 bug#39962: 27.0.90; Crash in Emacs 27.0.90 Pieter van Oostrum
2020-03-07  7:48 ` Eli Zaretskii
2020-03-07  8:40   ` Pieter van Oostrum
2020-03-07  8:41   ` Pieter van Oostrum
2020-03-07 10:51     ` Eli Zaretskii
2020-03-07 11:06   ` Pieter van Oostrum
2020-03-07 13:10     ` Eli Zaretskii
2020-03-07 15:06       ` Pieter van Oostrum
2020-03-07 15:17         ` Eli Zaretskii
2020-03-07 15:49           ` Pieter van Oostrum
2020-03-07 16:07             ` Eli Zaretskii
2020-03-07 17:21               ` Pieter van Oostrum
2020-03-07 18:01                 ` Eli Zaretskii
2020-03-07 19:14                   ` Pieter van Oostrum
2020-03-07 19:21                     ` Eli Zaretskii
2020-03-07 22:07                       ` Pieter van Oostrum
2020-03-09  4:00     ` Pip Cet
2020-03-08  7:42 ` Paul Eggert
2020-03-08  9:34   ` Pieter van Oostrum
2020-03-08 10:05     ` Paul Eggert
2020-03-08 21:37       ` Pieter van Oostrum
2020-03-08 21:58         ` Pieter van Oostrum
2020-03-08 22:34         ` Paul Eggert
2020-03-08 23:58           ` Pieter van Oostrum
2020-03-09  0:01             ` Paul Eggert
2020-03-09 13:26               ` Pieter van Oostrum
2020-03-09 17:10                 ` Eli Zaretskii
2020-03-09 19:48                   ` Pieter van Oostrum
2020-03-10 13:37                     ` Pieter van Oostrum
2020-03-09 19:51                   ` Paul Eggert
2020-03-09 21:32                     ` Pieter van Oostrum
2020-03-10 10:52                       ` Pieter van Oostrum
2020-03-10 14:19                         ` Pip Cet
2020-03-10 16:36                           ` Pieter van Oostrum
2020-03-11 14:32                             ` Pip Cet
2020-03-11 15:16                               ` Pieter van Oostrum
2020-03-11 15:43                                 ` Pip Cet
2020-03-11 15:51                                   ` Paul Eggert
2020-03-11 16:21                                     ` Eli Zaretskii
2020-03-11 17:52                                   ` Eli Zaretskii
2020-03-11 18:53                                     ` Pip Cet
2020-03-11 19:34                                       ` Eli Zaretskii
2020-03-12 10:32                                         ` Pip Cet
2020-03-12 15:23                                           ` Eli Zaretskii
2020-03-12 20:36                                             ` Pip Cet
2020-03-13  9:39                                               ` Eli Zaretskii
2020-03-13 13:56                                                 ` Pip Cet
2020-03-13 16:30                                                   ` Eli Zaretskii
2020-03-14  9:02                                                     ` Pip Cet
2020-03-14 15:39                                                       ` Pip Cet
2020-03-14 16:00                                                         ` Paul Eggert
2020-03-14 16:15                                                           ` Pip Cet
2020-03-14 16:57                                                             ` Eli Zaretskii
2020-03-14 18:34                                                               ` Pip Cet
2020-03-14 19:09                                                                 ` Paul Eggert
2020-03-14 20:10                                                                   ` Eli Zaretskii
2020-03-15 12:12                                                                     ` Pip Cet
2020-03-15 14:53                                                                       ` Eli Zaretskii
2020-03-15 12:09                                                                   ` Pip Cet
2020-03-15 14:50                                                                     ` Eli Zaretskii
2020-03-16 16:31                                                     ` Stefan Monnier
2020-03-11 20:03                                   ` Pieter van Oostrum
2020-03-12 13:55                                     ` Pip Cet
2020-03-12 18:13                                       ` Pieter van Oostrum
2020-03-12 20:00                                         ` Pip Cet
2020-03-13  8:09                                           ` Eli Zaretskii
2020-03-13  8:39                                             ` Pip Cet
2020-03-13  9:19                                               ` Eli Zaretskii
2020-03-13 17:43                                                 ` Pieter van Oostrum
2020-03-14  3:38                                                 ` Richard Stallman
2020-03-14  8:37                                                   ` Eli Zaretskii
2020-03-14  9:16                                                     ` Pip Cet
2020-03-14 15:34                                                       ` Pip Cet
2020-03-13 17:42                                             ` Pieter van Oostrum
2020-03-13 19:34                                               ` Eli Zaretskii
2020-03-13 21:35                                                 ` Pieter van Oostrum
2020-03-14  8:08                                                   ` Eli Zaretskii
2020-03-14 21:32                                                     ` Pieter van Oostrum
2020-03-15 19:49                                                       ` Pieter van Oostrum
2020-03-15 19:57                                                         ` Eli Zaretskii
2020-03-15 23:26                                                           ` Pieter van Oostrum
2020-03-16 10:44                                                             ` Pieter van Oostrum
2020-03-16 15:07                                                               ` Eli Zaretskii
2020-03-16 15:33                                                               ` Pip Cet
2020-03-16 17:19                                                                 ` Pip Cet
2020-03-17  3:29                                                                   ` Pieter van Oostrum
2020-03-17  4:54                                                                     ` Pip Cet
2020-03-17  5:20                                                                       ` Pip Cet
2020-03-17  8:45                                                                         ` Pieter van Oostrum
2020-03-17 13:54                                                                           ` Pip Cet
2020-03-17 15:27                                                                             ` Pieter van Oostrum
2020-03-17 20:16                                                                               ` Pip Cet
2020-03-17 23:32                                                                                 ` Pieter van Oostrum
2020-03-18 15:05                                                                                   ` Eli Zaretskii
2020-03-19 13:23                                                                                     ` Pieter van Oostrum
2020-03-19 13:57                                                                                       ` Pip Cet
2020-03-21 21:22                                                                                         ` Pieter van Oostrum
2020-03-22 14:21                                                                                           ` Eli Zaretskii
2020-03-22 15:48                                                                                           ` Pip Cet [this message]
2020-03-23 19:34                                                                                             ` Pip Cet
2020-03-17  8:40                                                                       ` Pieter van Oostrum
2020-03-17 15:33                                                                     ` Eli Zaretskii
2020-03-17 20:59                                                                       ` Paul Eggert
2020-03-18  6:17                                                                         ` Pip Cet
2020-03-18  9:22                                                                           ` Robert Pluim
2020-03-18 11:38                                                                             ` Pieter van Oostrum
2020-03-18 11:57                                                                               ` Paul Eggert
2020-03-18 14:08                                                                               ` Pip Cet
2020-03-19 19:17                                                                                 ` Pieter van Oostrum
2020-03-19 19:31                                                                                   ` Pip Cet
2020-03-19 21:30                                                                                     ` Pieter van Oostrum
2020-03-18 14:08                                                                           ` Eli Zaretskii
2020-03-16 18:36                                                                 ` Pieter van Oostrum
2020-03-13  7:58                                         ` Eli Zaretskii
2020-03-10 15:10                         ` Eli Zaretskii
2020-03-10 18:23                           ` Pieter van Oostrum
2020-03-11  8:22                         ` Paul Eggert
2022-04-30 12:38 ` Lars Ingebrigtsen
2022-05-29 13:19   ` Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOqdjBcx2ZvPgMW5Vber1tWctfeD8sY6TH6Sa0+NRp74GyHnPw@mail.gmail.com \
    --to=pipcet@gmail.com \
    --cc=39962@debbugs.gnu.org \
    --cc=eggert@cs.ucla.edu \
    --cc=pieter-l@vanoostrum.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).