]> code.delx.au - gnu-emacs/blobdiff - src/marker.c
Merge from emacs--rel--22
[gnu-emacs] / src / marker.c
index 48685e7d27cfa577657a18c5d5a2e04ef83f631a..0c89f71d79ab0292b2ec3c19fc883960ec2fa28d 100644 (file)
@@ -1,12 +1,12 @@
 /* Markers: examining, setting and deleting.
 /* Markers: examining, setting and deleting.
-   Copyright (C) 1985, 1997, 1998, 2002, 2003, 2004,
-                 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1997, 1998, 2001, 2002, 2003, 2004,
+                 2005, 2006, 2007  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -452,9 +452,12 @@ Returns nil if MARKER points into a dead buffer.  */)
   if (XMARKER (marker)->buffer)
     {
       XSETBUFFER (buf, XMARKER (marker)->buffer);
   if (XMARKER (marker)->buffer)
     {
       XSETBUFFER (buf, XMARKER (marker)->buffer);
-      /* Return marker's buffer only if it is not dead.  */
-      if (!NILP (XBUFFER (buf)->name))
-       return buf;
+      /* If the buffer is dead, we're in trouble: the buffer pointer here
+        does not preserve the buffer from being GC'd (it's weak), so
+        markers have to be unlinked from their buffer as soon as the buffer
+        is killed.  */
+      eassert (!NILP (XBUFFER (buf)->name));
+      return buf;
     }
   return Qnil;
 }
     }
   return Qnil;
 }
@@ -848,7 +851,7 @@ see `marker-insertion-type'.  */)
 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
        Smarker_insertion_type, 1, 1, 0,
        doc: /* Return insertion type of MARKER: t if it stays after inserted text.
 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
        Smarker_insertion_type, 1, 1, 0,
        doc: /* Return insertion type of MARKER: t if it stays after inserted text.
-nil means the marker stays before text inserted there.  */)
+The value nil means the marker stays before text inserted there.  */)
      (marker)
      register Lisp_Object marker;
 {
      (marker)
      register Lisp_Object marker;
 {