Mercurial > hg > xemacs-beta
diff src/filelock.c @ 444:576fb035e263 r21-2-37
Import from CVS: tag r21-2-37
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:36:19 +0200 |
parents | abe6d1db359e |
children | 1ccc32a20af4 |
line wrap: on
line diff
--- a/src/filelock.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/filelock.c Mon Aug 13 11:36:19 2007 +0200 @@ -32,6 +32,7 @@ Lisp_Object Qask_user_about_supersession_threat; Lisp_Object Qask_user_about_lock; +int inhibit_clash_detection; #ifdef CLASH_DETECTION @@ -311,10 +312,15 @@ register Lisp_Object attack, orig_fn; register char *lfname, *locker; lock_info_type lock_info; - struct gcpro gcpro1,gcpro2; + struct gcpro gcpro1, gcpro2, gcpro3; + Lisp_Object old_current_buffer; Lisp_Object subject_buf; - GCPRO2 (fn, subject_buf); + if (inhibit_clash_detection) + return; + + XSETBUFFER (old_current_buffer, current_buffer); + GCPRO3 (fn, subject_buf, old_current_buffer); orig_fn = fn; fn = Fexpand_file_name (fn, Qnil); @@ -333,8 +339,10 @@ } /* Try to lock the lock. */ - if (lock_if_free (&lock_info, lfname) <= 0) - /* Return now if we have locked it, or if lock creation failed */ + if (current_buffer != XBUFFER (old_current_buffer) + || lock_if_free (&lock_info, lfname) <= 0) + /* Return now if we have locked it, or if lock creation failed + or current buffer is killed. */ goto done; /* Else consider breaking the lock */ @@ -347,7 +355,7 @@ attack = call2_in_buffer (BUFFERP (subject_buf) ? XBUFFER (subject_buf) : current_buffer, Qask_user_about_lock , fn, build_string (locker)); - if (!NILP (attack)) + if (!NILP (attack) && current_buffer == XBUFFER (old_current_buffer)) /* User says take the lock */ { lock_file_1 (lfname, 1); @@ -488,5 +496,13 @@ defsymbol (&Qask_user_about_lock, "ask-user-about-lock"); } +void +vars_of_filelock (void) +{ + DEFVAR_BOOL ("inhibit-clash-detection", &inhibit_clash_detection /* +Non-nil inhibits creation of lock file to detect clash. +*/); + inhibit_clash_detection = 0; +} #endif /* CLASH_DETECTION */