Commit 25bef3dd authored by Karl Heuer's avatar Karl Heuer
Browse files

(lock_superlock): Synchronize NFS cache.

parent 6483e43f
......@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment