From: Luc Teirlinck <teirllm@dms.auburn.edu>
Cc: larsh@math.ku.dk, emacs-devel@gnu.org
Subject: Re: Fix to long-standing crashes in GC
Date: Mon, 24 May 2004 22:03:34 -0500 (CDT) [thread overview]
Message-ID: <200405250303.i4P33YF17293@raven.dms.auburn.edu> (raw)
In-Reply-To: <ufz9q8k9m.fsf@gnu.org> (message from Eli Zaretskii on 24 May 2004 07:30:13 +0200)
Eli Zaretskii wrote:
If you can show where's the text that assumes that, i.e. is not clear
to someone who doesn't have a good knowledge about Emacs memory
management, I'm sure someone will try to improve those parts of the
text.
For instance:
Once you discover the corrupted Lisp object or data structure, it is
useful to look at it in a fresh Emacs session and compare its contents
with a session that you are debugging.
Except that to notice that a Lisp object is corrupted you have to
_already_ know how its contents look in a fresh Emacs session. Many
Elisp programmers do not have a very good knowledge about the very low
level C structure of various Lisp objects.
As an example, when I tried to debug a recent gc crash, the very first
thing I noticed was that the immediate cause of the abort was that the
garbage collector was trying to mark a Lisp_Misc_Free object. That
_was_ the problem, I did not need to look any further. Except that at
the time I did not know that this was not supposed to happen. (I know
now.) I did not even know what a Lisp_Misc_Free object was. (I know
now.) So I went through all of the last_marked array, without any
idea of what to look for, that is: how do you recognize a "corrupted
Lisp object or data structure"?
When you see:
(gdb) p last_marked_index
$1 = 18
(gdb) p last_marked[17]
$2 = 143587538
(gdb) pr
#<EMACS BUG: INVALID DATATYPE (MISC 0x0002) Save your buffers
immediately and please report this bug>
_then_ things are pretty obvious. But that is not always the case.
Other more concrete ambiguous stuff:
This is not easy since GC changes the tag bits and relocates strings
which make it hard to look at Lisp objects with commands such as `pr'.
It is sometimes necessary to convert Lisp_Object variables into
pointers to C struct's manually.
It says "It is sometimes necessary...". When?
When I see:
pr
that is, no output, I can guess it is necessary.
What if I see:
pr
""
I know from experience that I still have to use xstring in that case,
even though the empty string is a perfectly valid return value. But
xstring often reveals a different real value anyway. Is this a bug in
pr or is this normal?
What if I see
pr
"dired-find-file"
Can I trust _this_ or should I still use xstring, that is, should the
above have said: "It is always necessary, to be safe,..."?
Sincerely,
Luc.
next prev parent reply other threads:[~2004-05-25 3:03 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-13 18:19 Fix to long-standing crashes in GC Lars Hansen
2004-05-13 19:09 ` Luc Teirlinck
2004-05-13 19:29 ` Luc Teirlinck
2004-05-13 19:30 ` Lars Hansen
2004-05-13 19:19 ` Stefan Monnier
2004-05-13 22:16 ` Luc Teirlinck
2004-05-13 23:04 ` Stefan Monnier
2004-05-14 11:42 ` Kai Grossjohann
2004-05-14 14:53 ` Luc Teirlinck
2004-05-14 20:48 ` Kai Grossjohann
2004-05-16 9:27 ` Kai Grossjohann
2004-05-14 18:39 ` Luc Teirlinck
2004-05-14 20:54 ` Kim F. Storm
2004-05-14 21:02 ` Richard Stallman
2004-05-22 18:09 ` Lars Hansen
2004-05-23 16:33 ` Eli Zaretskii
2004-05-23 16:32 ` Luc Teirlinck
2004-05-23 17:11 ` Lars Hansen
2004-05-24 5:30 ` Eli Zaretskii
2004-05-25 3:03 ` Luc Teirlinck [this message]
2004-05-25 7:07 ` Eli Zaretskii
2004-05-15 4:39 ` Robert Marshall
2004-05-17 14:39 ` Kim F. Storm
2004-05-17 17:42 ` Robert Marshall
2004-05-17 14:43 ` Kim F. Storm
2004-05-18 0:13 ` Luc Teirlinck
2004-05-19 1:26 ` Richard Stallman
2004-05-19 12:11 ` Kim F. Storm
2004-05-19 19:32 ` Stefan Monnier
2004-05-19 22:33 ` Kim F. Storm
2004-05-20 13:17 ` Richard Stallman
2004-05-19 12:52 ` Kim F. Storm
2004-05-19 16:48 ` Stefan Monnier
2004-05-19 22:04 ` Kim F. Storm
2004-05-19 22:25 ` Stefan Monnier
2004-05-19 22:37 ` Kim F. Storm
2004-05-19 22:50 ` Stefan Monnier
2004-05-20 0:44 ` Kim F. Storm
2004-05-21 23:43 ` Kim F. Storm
2004-05-23 1:14 ` Stefan Monnier
2004-05-23 18:28 ` Richard Stallman
2004-05-24 11:57 ` Kim F. Storm
2004-05-28 21:51 ` Stefan Monnier
2004-05-28 23:40 ` Kim F. Storm
2004-05-28 23:49 ` Stefan Monnier
2004-05-29 23:15 ` Kim F. Storm
2004-05-30 20:44 ` Stefan Monnier
2004-05-31 20:21 ` Kim F. Storm
2004-06-08 20:03 ` Lars Hansen
2004-05-20 7:08 ` Richard Stallman
2004-05-21 22:58 ` Stefan Monnier
-- strict thread matches above, loose matches on Subject: below --
2004-05-13 23:34 Robert Anderson
2004-05-12 13:19 Kim F. Storm
2004-05-13 13:06 ` Kenichi Handa
2004-05-13 15:45 ` Richard Stallman
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200405250303.i4P33YF17293@raven.dms.auburn.edu \
--to=teirllm@dms.auburn.edu \
--cc=emacs-devel@gnu.org \
--cc=larsh@math.ku.dk \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.