annotate lisp/post-gc.el @ 2362:6aa56b089139

[xemacs-hg @ 2004-11-02 09:51:04 by ben] To: xemacs-patches@xemacs.org internals/index.texi: Deleted. Incorporated into internals.texi. Having a separate index file messes up texinfo-master-menu. internals/internals.texi: Add bunches and bunches and bunches and bunches of stuff, taken from documentation floating around in various places -- text.c, file-coding.c, other .c and .h files, stuff that I wrote up for an old XEmacs contract, proposals written up in the process of an e-mail discussion, etc. Fix up some mistakes, esp. in CCL. Extra crap from CCL, duplicated with Lispref, removed. Sections on Old Future Work and Future Work Discussion added. Bunches of other work. Add bunches of documentation taken from the source code. Fixup various places to use @strong{}, @code{}, @file{}. Create new Text chapter, split off from Buffers and Textual Representation. Create new chapter for MS Windows, mostly written from scratch. Consolidate all Mule info under "Multilingual Support". Break up chapter on modules and move some parts to the sections discussing the modules, for consolidation purposes. Add a big cross-reference table for all the modules to where they're discussed (or not). New chapter Asynchronous Events; Quit Checking. (Taken from various parts of the code.) New Introduction. New section on Focus Handling (from the code). NOTE that in the process, I discovered that we essentially have FOUR redundant introductions to Mule issues! Someone really needs to go through and clean them up and integrate them (sjt?).
author ben
date Tue, 02 Nov 2004 09:51:18 +0000
parents 75b8038f720e
children d27c1ee1943b 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
886
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
1 ;;; post-gc.el --- post-gc actions
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
2
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
3 ;; Copyright (C) 1985-1986, 1990, 1992-1997 Free Software Foundation, Inc.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
4 ;; Copyright (c) 1993, 1994 Sun Microsystems, Inc.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
5 ;; Copyright (C) 1995 Board of Trustees, University of Illinois
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
6
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
7 ;; Author: Mike Sperber <mike@xemacs.org>
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
8 ;; Maintainer: XEmacs Development Team
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
9 ;; Keywords: internal, dumped
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
10
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
11 ;; This file is part of XEmacs.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
12
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
13 ;; XEmacs is free software; you can redistribute it and/or modify it
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
14 ;; under the terms of the GNU General Public License as published by
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
16 ;; any later version.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
17
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
18 ;; XEmacs is distributed in the hope that it will be useful, but
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
19 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
21 ;; General Public License for more details.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
22
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
24 ;; along with XEmacs; see the file COPYING. If not, write to the
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
25 ;; Free Software Foundation, 59 Temple Place - Suite 330,
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
26 ;; Boston, MA 02111-1307, USA.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
27
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
28 ;;; Synched up with: Not in FSF.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
29
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
30 ;;; Commentary:
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
31
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
32 ;; This file is dumped with XEmacs.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
33
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
34 ;; This file defines actions to happen after each GC to perform
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
35 ;; additional cleanup, call finalizers, etc.
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
36
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
37 (defun run-finalizers (alist)
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
38 "Run the finalizers for all objects that have just become unreachable."
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
39 (let ((info (assq 'finalize-list alist)))
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
40 (if info
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
41 (let ((finalize-list (cdr info)))
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
42 (while finalize-list
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
43 (funcall (cdr (car finalize-list)) (car (car finalize-list)))
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
44 (setq finalize-list (cdr finalize-list)))))))
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
45
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
46 (add-hook 'post-gc-hook 'run-finalizers)
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
47
1591
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
48 (defvar simple-finalizer-ephemerons '()
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
49 "List of ephemerons for objects that have a finalizer attached..")
886
011e1bce6ece [xemacs-hg @ 2002-06-28 14:20:41 by michaels]
michaels
parents:
diff changeset
50
1591
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
51 (defun add-finalizer (object func)
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
52 "Add FUNC as a finalizer for object OBJECT."
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
53 (setq simple-finalizer-ephemerons
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
54 (cons (make-ephemeron object object func)
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
55 simple-finalizer-ephemerons)))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
56
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
57 (defun cleanup-simple-finalizers (alist)
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
58 "Clean up `simple-finalizer-ephemerons'."
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
59 ;; We have to do this by hand because DELETE-IF isn't defined yet.
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
60 (let ((current simple-finalizer-ephemerons)
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
61 (prev nil))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
62 (while (not (null current))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
63 (if (not (ephemeron-ref (car current)))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
64 (if (null prev)
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
65 (setq simple-finalizer-ephemerons (cdr current))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
66 (setcdr prev (cdr current)))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
67 (setq prev current))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
68 (setq current (cdr current)))))
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
69
75b8038f720e [xemacs-hg @ 2003-07-26 14:01:23 by michaels]
michaels
parents: 886
diff changeset
70 (add-hook 'post-gc-hook 'cleanup-simple-finalizers)