From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#13149: 24.3.50; Emacs thinks file was changed outside Emacs, but it was not Date: Fri, 18 Jan 2013 18:45:14 +0400 Message-ID: <50F95FFA.3080601@yandex.ru> References: <6CDE13E3BCAA4AFAAB8BCE105C6ABF12@us.oracle.com> <874njs19zb.fsf@yandex.ru> <50F3935A.2090003@yandex.ru> <50F41CE7.60306@gmail.com> <50F44E6B.8090007@cs.ucla.edu> <50F484CB.6010905@gmail.com> <50F4FB0B.5070003@cs.ucla.edu> <50F5192B.602@yandex.ru> <50F5928A.9010009@cs.ucla.edu> <50F5CC3D.5090802@yandex.ru> <50F5CE65.9030002@cs.ucla.edu> <50F5D3F5.6050604@yandex.ru> <50F5DA58.3020404@cs.ucla.edu> <50F5E1C1.2040301@yandex.ru> <50F5E9DB.1030309@gmail.com> <50F64149.6010704@cs.ucla.edu> <50F7D358.9030100@gmail.com> <50F86E12.3040707@cs.ucla.edu> <50F8D150.8030200@gmail.com> <50F8D731.5020001@cs.ucla.edu> <50F8D93B.1040901@yandex.ru> <50F8DCCB.1030602@cs.ucla.edu> <83a9s67wlr.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1358520389 3247 80.91.229.3 (18 Jan 2013 14:46:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 18 Jan 2013 14:46:29 +0000 (UTC) Cc: 13149@debbugs.gnu.org, Paul Eggert To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Jan 18 15:46:47 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TwDDL-00046F-Fj for geb-bug-gnu-emacs@m.gmane.org; Fri, 18 Jan 2013 15:46:39 +0100 Original-Received: from localhost ([::1]:37390 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TwDD4-0006Ft-RM for geb-bug-gnu-emacs@m.gmane.org; Fri, 18 Jan 2013 09:46:22 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:51933) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TwDD0-0006Ex-JD for bug-gnu-emacs@gnu.org; Fri, 18 Jan 2013 09:46:21 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TwDCy-0004GZ-0a for bug-gnu-emacs@gnu.org; Fri, 18 Jan 2013 09:46:18 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:32843) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TwDCx-0004GV-S9 for bug-gnu-emacs@gnu.org; Fri, 18 Jan 2013 09:46:15 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TwDDi-0004cJ-2G for bug-gnu-emacs@gnu.org; Fri, 18 Jan 2013 09:47:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 18 Jan 2013 14:47:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13149 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: unreproducible moreinfo Original-Received: via spool by 13149-submit@debbugs.gnu.org id=B13149.135852037017675 (code B ref 13149); Fri, 18 Jan 2013 14:47:01 +0000 Original-Received: (at 13149) by debbugs.gnu.org; 18 Jan 2013 14:46:10 +0000 Original-Received: from localhost ([127.0.0.1]:38307 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TwDCr-0004b2-Mi for submit@debbugs.gnu.org; Fri, 18 Jan 2013 09:46:10 -0500 Original-Received: from mail-la0-f49.google.com ([209.85.215.49]:43552) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TwDCn-0004ar-LY for 13149@debbugs.gnu.org; Fri, 18 Jan 2013 09:46:07 -0500 Original-Received: by mail-la0-f49.google.com with SMTP id fk20so3970258lab.36 for <13149@debbugs.gnu.org>; Fri, 18 Jan 2013 06:45:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=ou1tQCQSnO2HDDyPjpYH1K0LvgPQ4WI9KuRtgrC8mv8=; b=cm7aAw4mXJmkWf7clsy64eO0gbAbwyqQ0ds1TrWQTm1f72ceYdPwRdrFMayvdvX/fs yPjVlXLFZ8Obn1XIWlwyIob9wS/rZBSRbmqv0ac7NbL4VEKqiYB0zuj7lIdeQmfYVrry fm+h4jpIoSJTThB+vqJWjTawv6grqZY/H2bM+VOmPQY8Dc6QeME8IN+J1l79MZ8YsXnS jyVST7WsTf1Ivfi+CJxsg1ul6ZDBLuoz6UnrQWmLu7YiZdk7JiHt6GCRYw0T+Xk7H9VB yv/PuJu7yb4Oyq1vCgTxpwJNUswFfKawxD4ssl8++kUCD5n4FstdWOK3r7xRQEZhJMK1 qsEQ== X-Received: by 10.152.109.238 with SMTP id hv14mr8721157lab.30.1358520317592; Fri, 18 Jan 2013 06:45:17 -0800 (PST) Original-Received: from [127.0.0.1] ([178.252.98.87]) by mx.google.com with ESMTPS id fv12sm2124972lab.12.2013.01.18.06.45.13 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 18 Jan 2013 06:45:14 -0800 (PST) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130107 Thunderbird/17.0.2 In-Reply-To: <83a9s67wlr.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:69978 Archived-At: On 18.01.2013 11:56, Eli Zaretskii wrote: >> Date: Thu, 17 Jan 2013 21:25:31 -0800 >> From: Paul Eggert >> CC: 13149@debbugs.gnu.org, Eli Zaretskii >> >> On 01/17/2013 09:10 PM, Dmitry Gutov wrote: >>> cifs: >>> >>> 1358485764.638001400 fstat >>> 1358485764.638001400 lstat >>> 1358485764.638001400 stat >>> * >>> 1358485764.638001400 fstat >>> 1358485764.638001400 lstat >>> 1358485764.638001400 stat >> >> That looks busted, since there's >> a 10 ms sleep followed by a write at the two >> points I marked "*" above, which means that >> fstat, lstat, and stat are all wrong after the "*". > > Who said anything was actually written to the file? You'd need > 'fsync' to be sure, don't you? Sticking fsync(fd) after the call to 'write' doesn't change anything. If, however, I move the 'nanosleep' after the 'write' and set the interval to 1 or 2 seconds, on vboxsf the numbers often become different, but without guarantee. With 1 second, they usually the same, with 2 second, they're mostly different, but still the same sometimes. gutov@vbx:~/docs/Ruby$ ~/emacs-bzr/fs-test2 1358520180.757726300 fstat 1358520180.757726300 lstat 1358520180.757726300 stat 1358520181.689844700 fstat 1358520181.689844700 lstat 1358520181.689844700 stat gutov@vbx:~/docs/Ruby$ ~/emacs-bzr/fs-test2 1358520183.414063600 fstat 1358520183.414063600 lstat 1358520183.414063600 stat 1358520183.414063600 fstat 1358520183.414063600 lstat 1358520183.414063600 stat Adding another 'nanosleep' before the 'write' doesn't change that. On cifs, the numbers are never different. #include #include #include #include #include static int report_times (int fd, char const *file) { struct stat fst, lst, st; if (fstat (fd, &fst) != 0) return perror ("fstat"), -1; if (lstat (file, &lst) != 0) return perror ("lstat"), -1; if (stat (file, &st) != 0) return perror ("stat"), -1; printf ("%ld.%09ld fstat\n", (long) fst.st_mtim.tv_sec, fst.st_mtim.tv_nsec); printf ("%ld.%09ld lstat\n", (long) lst.st_mtim.tv_sec, lst.st_mtim.tv_nsec); printf ("%ld.%09ld stat\n", (long) st.st_mtim.tv_sec, st.st_mtim.tv_nsec); printf ("\n"); return 0; } int main (void) { static char const file[] = "foo"; struct timespec interval, bef_interval; int fd; unlink (file); fd = open (file, O_CREAT | O_WRONLY, -1); if (fd < 0) return perror ("open"), 1; if (report_times (fd, file) != 0) return 1; bef_interval.tv_sec = 0; bef_interval.tv_nsec = 100000000; interval.tv_sec = 2; interval.tv_nsec = 0; // if (nanosleep (&bef_interval, 0) != 0) // return perror ("nanosleep"), 1; if (write (fd, file, sizeof file - 1) != sizeof file - 1) return perror ("write"), 1; // fsync(fd); if (nanosleep (&interval, 0) != 0) return perror ("nanosleep"), 1; if (report_times (fd, file) != 0) return 1; return 0; }