1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

(lock_superlock): Synchronize NFS cache.

This commit is contained in:
Karl Heuer 1994-03-11 02:35:50 +00:00
parent 6483e43f34
commit 25bef3dd72

View file

@ -37,6 +37,23 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <paths.h>
#include "buffer.h"
#ifdef SYSV_SYSTEM_DIR
#include <dirent.h>
#else /* not SYSV_SYSTEM_DIR */
#ifdef NONSYSTEM_DIR_LIBRARY
#include "ndir.h"
#else /* not NONSYSTEM_DIR_LIBRARY */
#ifdef MSDOS
#include <dirent.h>
#else
#include <sys/dir.h>
#endif
#endif /* not NONSYSTEM_DIR_LIBRARY */
#ifndef MSDOS
extern DIR *opendir ();
#endif /* not MSDOS */
#endif /* not SYSV_SYSTEM_DIR */
extern int errno;
extern char *egetenv ();
@ -325,6 +342,7 @@ lock_superlock (lfname)
char *lfname;
{
register int i, fd;
DIR *lockdir;
for (i = -20; i < 0 && (fd = open (superlock_path,
O_WRONLY | O_EXCL | O_CREAT, 0666)) < 0;
@ -332,6 +350,13 @@ lock_superlock (lfname)
{
if (errno != EEXIST)
return;
/* This seems to be necessary to prevent Emacs from hanging when the
competing process has already deleted the superlock, but it's still
in the NFS cache. So we force NFS to synchronize the cache. */
if (lockdir = opendir (lock_path))
closedir (lockdir);
sleep (1);
}
if (fd >= 0)