*
*/
+#define HARDMAXATTEMPTS 10
+
static int
dotlock_lock(const char *realpath)
{
size_t prev_size = 0;
int fd;
int count = 0;
+ int hard_count = 0;
struct stat sb;
time_t t;
close(fd);
- while(1)
+ while (hard_count++ < HARDMAXATTEMPTS)
{
BEGIN_PRIVILEGED();
- link(nfslockfile, lockfile);
+ link (nfslockfile, lockfile);
END_PRIVILEGED();
- if(stat(nfslockfile, &sb) != 0)
+ if (stat(nfslockfile, &sb) != 0)
{
/* perror("stat"); */
return DL_EX_ERROR;
}
-
+
if(sb.st_nlink == 2)
break;
-
+
if(count == 0)
prev_size = sb.st_size;
-
+
if(prev_size == sb.st_size && ++count > Retry)
{
if(f_force)
sleep(1);
} while (time(NULL) == t);
}
-
+
BEGIN_PRIVILEGED();
unlink(nfslockfile);
END_PRIVILEGED();