Subject: bug#8496: closed (Re: bug#8496: some file locking code in insert-file-contents cannot be right)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 14 Apr 2011 08:01:02 +0000

Your bug report

#8496: some file locking code in insert-file-contents cannot be right

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
8496: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8496
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#8496: some file locking code in insert-file-contents cannot be right
From: Andreas Schwab <[email-masked]>
To: Paul Eggert <[email-masked]>
Cc: [email-masked]
Date: Thu, 14 Apr 2011 10:00:14 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Paul Eggert <[email-masked]> writes:

> What *is* intended here?

If you look at 9a95c4d it is obvious.

Andreas.

-- 
Andreas Schwab, [email-masked]
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Subject: some file locking code in insert-file-contents cannot be right
From: Paul Eggert <[email-masked]>
To: [email-masked]
Date: Wed, 13 Apr 2011 17:40:49 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

As a result of the "mark unexported symbols 'static'" patch that I'm
working on, in the Emacs trunk I found some file-locking code inside
insert-file-contents that cannot be right:

     if (NILP (visit) && inserted > 0)
       {
   #ifdef CLASH_DETECTION
	 if (!NILP (BVAR (current_buffer, file_truename))
	     /* Make binding buffer-file-name to nil effective.  */
	     && !NILP (BVAR (current_buffer, filename))
	     && SAVE_MODIFF >= MODIFF)
	   we_locked_file = 1;
   #endif /* CLASH_DETECTION */
	 prepare_to_modify_buffer (GPT, GPT, NULL);
       }

The above code is equivalent to a no-op, since 'inserted' must
be zero here.  There's later code:

   #ifdef CLASH_DETECTION
	 if (we_locked_file)
	   unlock_file (BVAR (current_buffer, file_truename));
   #endif

that is also a no-op, because 'we_locked_file' must be zero.

GCC merrily optimizes all this code away, but I don't think
that was intended.  What *is* intended here?