comparison src/lread.c @ 102267:12ffc72c0bbc

* lread.c (Fload): Stop checking Vloads_in_progress and signal error as soon as a recursive load is detected.
author Juanma Barranquero <lekktu@gmail.com>
date Wed, 25 Feb 2009 12:47:23 +0000
parents e038c1a8307c
children d7ea9e8841d3
comparison
equal deleted inserted replaced
102266:23cb90d39b97 102267:12ffc72c0bbc
1111 the general case; the second load may do something different. */ 1111 the general case; the second load may do something different. */
1112 { 1112 {
1113 int count = 0; 1113 int count = 0;
1114 Lisp_Object tem; 1114 Lisp_Object tem;
1115 for (tem = Vloads_in_progress; CONSP (tem); tem = XCDR (tem)) 1115 for (tem = Vloads_in_progress; CONSP (tem); tem = XCDR (tem))
1116 if (!NILP (Fequal (found, XCAR (tem)))) 1116 if (!NILP (Fequal (found, XCAR (tem))) && (++count > 3))
1117 count++; 1117 {
1118 if (count > 3) 1118 if (fd >= 0)
1119 { 1119 emacs_close (fd);
1120 if (fd >= 0) 1120 signal_error ("Recursive load", Fcons (found, Vloads_in_progress));
1121 emacs_close (fd); 1121 }
1122 signal_error ("Recursive load", Fcons (found, Vloads_in_progress));
1123 }
1124 record_unwind_protect (record_load_unwind, Vloads_in_progress); 1122 record_unwind_protect (record_load_unwind, Vloads_in_progress);
1125 Vloads_in_progress = Fcons (found, Vloads_in_progress); 1123 Vloads_in_progress = Fcons (found, Vloads_in_progress);
1126 } 1124 }
1127 1125
1128 /* Get the name for load-history. */ 1126 /* Get the name for load-history. */